Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用shinyjs隐藏NavBar菜单?_R_Shiny_Hidden_Shinyjs - Fatal编程技术网

如何使用shinyjs隐藏NavBar菜单?

如何使用shinyjs隐藏NavBar菜单?,r,shiny,hidden,shinyjs,R,Shiny,Hidden,Shinyjs,这个问题与navbarMenus和shinyjs包的组合有关。我已经构建了一个闪亮的应用程序,并根据以下建议添加了一个用户登录: 所以我知道,哪个用户登录了。现在我想显示和隐藏整个navbarMenu和单个tabPanels,具体取决于登录的用户。比如说,有两个用户,“admin”和“custom”,对于“admin”,应显示所有NavBar菜单和所有选项卡面板,而“custom”仅显示NavBar菜单2,在该菜单中仅显示选项卡面板22 library(shiny) library(shinyj

这个问题与navbarMenus和shinyjs包的组合有关。我已经构建了一个闪亮的应用程序,并根据以下建议添加了一个用户登录:

所以我知道,哪个用户登录了。现在我想显示和隐藏整个navbarMenu和单个tabPanels,具体取决于登录的用户。比如说,有两个用户,“admin”和“custom”,对于“admin”,应显示所有NavBar菜单和所有选项卡面板,而“custom”仅显示NavBar菜单2,在该菜单中仅显示选项卡面板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)
库(闪亮)
图书馆(shinyjs)
#定义用户界面

ui您的代码有一些错误,在
服务器
函数末尾缺少
,使用
m1
调用
隐藏
函数,而不是
“m1”
,并且不使用
shinyjs::useShinyjs()
初始化
shinyjs
。此外,您不能在
navbarMenu
tabPanel
周围使用
div
,它们将不会被渲染。最后,任何用户都很容易显示/隐藏内容

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

库(闪亮)
图书馆(shinyjs)

谢谢,Geovany,这帮了大忙。还有一个问题:您提到,任何用户都可以很容易地显示任何隐藏的内容。你能解释一下原因吗。谢谢。我在浏览类似的解决方案时遇到了这个问题。这个答案有点粗糙,因为它使用
renderUI
从服务器内部构建ui-这非常低效,不推荐使用(例如,menu2必须构建两次)。相反,请考虑使用以下内容:
user<-'custom'