如何用 shinyjs 隐藏 navbarMenus?

How to hide navbarMenus with shinyjs?

这个问题与 navbarMenus 和 shinyjs 包的组合有关。我已经构建了一个闪亮的应用程序,并且还按照以下建议添加了一个用户登录名:https://gist.github.com/withr/9001831.

所以我知道哪个用户已登录。现在我想显示和隐藏整个 navbarMenu 和单个 tabPanel,具体取决于哪个用户已登录。假设有两个用户,'admin' 和 'custom',对于 'admin',应显示所有 navbarMenus 和所有 tabPanel,而 'custom' 仅显示 navbarMenu 2,并且在此菜单中仅显示 tabPanel 22。

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'

此外,第一个 navbarMenu 'm1' 的外观很奇怪 - 它实际上并没有隐藏,它只是空的。 有知道的帮忙吗?

您的代码有一些错误,在您的 server 函数末尾缺少 },使用 m1 而不是 "m1" 调用 hide 函数,而不用 shinyjs::useShinyjs() 初始化 shinyjs。此外,您不能在 navbarMenutabPanel 周围使用 div,它们将不会被渲染。最后,任何用户都可以很容易地 show/hide 内容。

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

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)