r - 如何动态选择闪亮的仪表板皮肤?
问题描述
我想通过 selectInput 反应性地选择闪亮仪表板的皮肤。
我尝试了以下代码,但仪表板框架消失了。
library(shiny)
library(shinydashboard)
ui <- uiOutput("ui")
server <- function(input, output, session) {
shiny.session <- reactiveValues(skin = "blue")
ui <- function() {
dashboardPage(dashboardHeader(disable = FALSE),
dashboardSidebar(),
dashboardBody(),
skin = shiny.session$skin)
}
output$ui <- renderUI(ui())
}
shinyApp(ui, server)
解决方案
皮肤由 shinydashboard 主体的类决定:<body class="skin-blue" style="min-height: 611px; height: auto;">
。
我们可以使用一些 javascript 动态更改类。这是一个小例子:
library(shiny)
library(shinydashboard)
js <- "Shiny.addCustomMessageHandler('change_skin', function(skin) {
document.body.className = skin;
});"
ui <- function() {
dashboardPage(dashboardHeader(),
dashboardSidebar(),
dashboardBody(
tags$head(tags$script(js)),
selectInput("skin_color", "Skin Color",
c("blue", "black", "purple",
"green", "red", "yellow"))
),
skin = "blue")
}
server <- function(input, output, session) {
observeEvent(input$skin_color, {
session$sendCustomMessage("change_skin", paste0("skin-", input$skin_color))
})
}
shinyApp(ui, server)
推荐阅读
- javascript - 无法在 IE11 中将 HTMLDivElement 附加到 HTMLUnknownElement
- javascript - 反应原生未定义变量
- javascript - VueJS Jest 测试 ajax 调用 (axios)
- c# - git - 使用来自另一个存储库的解决方案
- bash - 如何获得正确的 IP 地址
- r - 根据 Rownames 过滤 Data.frame
- r - 从 R 中的 emmeans 中删除一个对比
- c++ - CMake - 以正确的顺序将项目与 C 运行时对象文件链接
- python - 正确安装到系统解释器中以避免段错误
- javascript - React 中的绑定方法是什么?