【问题标题】:R shiny dashboard: generate full UI from serverR闪亮的仪表板:从服务器生成完整的用户界面
【发布时间】: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,你想传递ui1 shinyApp(ui = ui1, server = server)
  • 确实如此,但在我的完整代码中,我试图在 ui1 和 ui2 之间动态切换,因此我无法直接传递 ui1。
  • 如果您可以在代码中显示您是如何尝试切换的,那么我可能可以提供一些输入
  • 我用 MWE 的扩展版本更新了这个问题,包括反应开关

标签: r shiny shinydashboard


【解决方案1】:

您不能拥有 2 个 ui(据我所知),但您可以更改其中的一部分。例如,仪表板主体。我希望这个解决方案有效。如果您正在尝试登录页面,您可能想查看thisthis

library(shiny)
library(shinydashboard)

# Ui ####
header <- dashboardHeader()
sidebar <- dashboardSidebar()
body <- dashboardBody(uiOutput("uipage"))
ui <- dashboardPage(header, sidebar, body)

# Server ####
server <- function(input, output) {
    output$uipage <- renderUI({
        fluidPage(
            textInput('password', label = 'hello')
        )
    })

    observeEvent(input$password,{
        if(input$password == 'hello'){
            output$uipage <- renderUI({
                fluidPage(
                selectInput('enter', label = 'Say hello',choices = c("hello","world"))
                )
            })
        }
    })
}
shinyApp(ui = ui, server = server)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 2015-04-22
    • 1970-01-01
    • 2019-02-12
    • 2023-03-13
    • 2018-04-30
    • 2020-05-23
    • 1970-01-01
    相关资源
    最近更新 更多