2017-09-05 6 views
3

이 질문은 navbarMenus와 shinyjs 패키지의 조합으로 인한 것입니다. 나는 반짝이는 앱을 만들었고이 제안에 따라 사용자 로그인을 추가했습니다 : https://gist.github.com/withr/9001831.shinyjs로 navbarMenus를 숨기는 방법?

로그인 한 사용자에 따라 전체 navbarMenu와 단일 tabPanels를 모두 표시하고 숨기려고합니다. 이제 'admin'이라는 두 명의 사용자가 있습니다. and 'custom'그리고 'admin'의 경우 모든 navbarMenus와 모든 tabPanels가 표시되어야하며 '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) 

의 탭 패널 ('tab22')는 숨겨져 있습니다,하지만 난

user<-'custom' 

플러스, 첫 navbarMenu 'M1'의 모양을 정의 할 때, 표시되지 않습니다이다 이상하다 - 사실은 숨겨져 있지 않다. 단지 비어있다. 누구든지 도움을 알고 있습니까?

답변

1

코드는 m1 대신 "m1"으로 hide funciton를 호출하여 server 함수의 끝에서 } 누락, 약간의 오차가 있고, shinyjs::useShinyjs()shinyjs를 초기화하지. 또한 div (navbarMenu 또는 tabPanel)을 사용할 수 없으므로 렌더링되지 않습니다. 마지막으로 모든 사용자가 콘텐츠를 표시하거나 숨길 수 있습니다.

더 나은 옵션은 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) 
+0

감사합니다. Geovany, 많은 도움이되었습니다. 한 가지 더 궁금한 점이 있습니다. 언급 한 바와 같이 모든 사용자가 숨겨진 콘텐츠를 쉽게 보여줄 수 있습니다. 이유를 설명해 주시겠습니까? 감사. – laurenzo