代码之家  ›  专栏  ›  技术社区  ›  thmschk

如何用shinyjs隐藏navbarmenu?

  •  3
  • thmschk  · 技术社区  · 7 年前

    https://gist.github.com/withr/9001831 .

    library(shiny)
    library(shinyjs)
    
    # Define UI
    ui <-
    fluidPage(
    titlePanel("NAVBARPAGE"), # title
    br(),
    ################### NAVBAR  ############################
    navbarPage(
    "", # title
    ################### TABS THEMA  #######################
    hidden(div(id='m1',
    navbarMenu("Menu1",
    tabPanel('tab11',plotOutput('tab_11')),
    tabPanel('tab12',uiOutput('tab_12'))))),
    navbarMenu("Menu2",
    tabPanel('tab21',uiOutput('tab_21')),
    hidden(div(id='xxx',tabPanel('tab22',uiOutput('tab_22')))))
    #######################################################
    ))
    
    ###### SERVER #####
    server <- function(input, output,session) {
    #Define user
    user<-'admin'
    
    observe({
    if (user=='admin') {
    show('xxx')
    show('m1')
    }
    else {
    hide('xxx')
    hide(m1)
    }
    })
    # Run the application
    shinyApp(ui = ui, server = server)
    

    在这个最小的示例中,当我定义时,tabPanel(“tab22”)是隐藏的,但没有显示

    user<-'custom'
    

    有人知道帮助吗?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Geovany    7 年前

    您的代码有一些错误,缺少 } 在您的 server hide 函数 m1 "m1" ,并且不初始化 shinyjs 具有 shinyjs::useShinyjs() div 围绕 navbarMenu tabPanel

    更好的选择是创建 navbar uiOutput 并控制使用用户名渲染的内容。下面是一个基于代码的示例,用于显示基于用户的内容。

    library(shiny)
    library(shinyjs)
    ui <- fluidPage(
      selectInput("userSL", 'Users:', c('admin', 'custom')),
      titlePanel("NAVBARPAGE"), 
      br(),
      uiOutput("navbarPageUI")
    )
    
    server <- function(input, output,session) {
    
      output$navbarPageUI <- renderUI({
        user <- input$userSL
        if (user == 'admin') {
          navbarPage("", 
            navbarMenu("Menu1",
              tabPanel('tab11',plotOutput('tab_11')),
              tabPanel('tab12',uiOutput('tab_12'))
            ),
            navbarMenu("Menu2",
              tabPanel('tab21',uiOutput('tab_21')),
              tabPanel('tab22',uiOutput('tab_22'))
            )
          )
        } else {
          navbarPage("", 
            navbarMenu("Menu2",
              tabPanel('tab21',uiOutput('tab_21'))
            )
          )
        }
      })
    
    }
    
    shinyApp(ui = ui, server = server)