【发布时间】:2018-09-19 01:51:24
【问题描述】:
下面的第一个 MWE 生成一个空的 Shiny 仪表板应用程序:
library(shiny)
library(shinydashboard)
header <- dashboardHeader()
sidebar <- dashboardSidebar()
body <- dashboardBody()
ui1 <- dashboardPage(header, sidebar, body)
server <- function(input, output){}
shinyApp(ui = ui1, server = server)
我正在尝试从服务器端动态生成相同的 UI 页面,如下面的第二个示例中所做的那样,只有在写入正确的密码时才会显示第二个页面。它可以工作,但是页面设计不见了:
library(shiny)
library(shinydashboard)
# UI1 ####
ui1 <- fluidPage(
textInput('password', label = 'Say hello')
)
# UI2 ####
header <- dashboardHeader()
sidebar <- dashboardSidebar()
body <- dashboardBody()
ui2 <- dashboardPage(header, sidebar, body)
# Server ####
server <- function(input, output){
status <- reactiveValues(logged = F)
observeEvent(input$password,{
if(input$password == 'hello'){
status$logged <- T
}
})
output$uipage <- renderUI({
if(status$logged){
ui2
} else {
ui1
}
})
}
# UI ####
ui <- uiOutput("uipage")
shinyApp(ui = ui, server = server)
知道如何解决这种行为吗?
【问题讨论】:
-
你正在传递
ui = ui,你想传递ui1shinyApp(ui = ui1, server = server) -
确实如此,但在我的完整代码中,我试图在 ui1 和 ui2 之间动态切换,因此我无法直接传递 ui1。
-
如果您可以在代码中显示您是如何尝试切换的,那么我可能可以提供一些输入
-
我用 MWE 的扩展版本更新了这个问题,包括反应开关
标签: r shiny shinydashboard