1

我已经转移到新的 bs4dash 并且在更新控制栏时遇到了一些问题。对于我侧边栏上的每个不同选项卡,我想要一个相应的控制栏。例如,如果侧边栏选项卡是“主页”,我希望控制栏由多个 selectizeInputs 组成。但是,如果侧边栏选项卡是“新闻”,我希望控制栏具有不同的文本输出。

这是我正在使用的一些代码

##UI
  controlbar = dashboardControlbar(
    id = "controlbar",
    collapsed = T
  
    )

##Server 

observeEvent(input$current_tab,{
if(input$current_tab == "home"){
updateControlbar(id = "controlbar", session = session,
selectizeInput("one", "one", choices = c(1,2,3)
), 
selectizeIntput("two", "two", choices = c(1,2,3)
} else if(input$current_tab == "News"){
updateControlbar(id = "controlbar", session = session,
textInput("news1"),
textInput("news2")
}
})

我也尝试了许多其他组合,但似乎没有任何效果。谢谢您的帮助

4

1 回答 1

1

您可以将条件面板与反应函数结合起来。此代码片段显示了一个非常琐碎的案例。

library(shiny)
library(bs4Dash)

shinyApp(
    ui = dashboardPage(
        header = dashboardHeader(),
        sidebar = dashboardSidebar(uiOutput("sidebar")),
        body = dashboardBody(),
        controlbar = dashboardControlbar(uiOutput("controlbar"))
    ),
    server = function(input, output, session) {
        output$sidebar <- renderMenu({
            sidebarMenu(id = "main_menu",
                menuItem(text = "First page", tabName = "tab1"),
                menuItem(text = "Second page", tabName = "tab2")
            )
        })
        output$show_tab1 <- reactive({
            !is.null(input$main_menu) && input$main_menu == "tab1"
        })
        output$show_tab2 <- reactive({
            !is.null(input$main_menu) && input$main_menu == "tab2"
        })
        outputOptions(output, "show_tab1", suspendWhenHidden = FALSE)
        outputOptions(output, "show_tab2", suspendWhenHidden = FALSE)
        output$controlbar <- renderUI({
            div(
                conditionalPanel(
                    condition = "output.show_tab1",
                    p("Widgets for the first page")
                ),
                conditionalPanel(
                    condition = "output.show_tab2",
                    p("Widgets for the second page")
                )
            )
        })
    }
)
于 2021-01-26T11:54:00.130 回答