如何用 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
。此外,您不能在 navbarMenu
或 tabPanel
周围使用 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)
这个问题与 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
。此外,您不能在 navbarMenu
或 tabPanel
周围使用 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)