2017-09-05 1 views
3

この質問は、navbarMenusとshinyjsパッケージの組み合わせでデラックスです。私は光沢のあるアプリを構築して、この提案に続いてユーザログインを追加しました:https://gist.github.com/withr/9001831shinyjsでnavbarMenusを非表示にするには?

どのユーザーがログインしているのか分かります。ログインしているユーザーに応じて、navbarメニューと単一のtabPanelsの両方を表示して非表示にしたいとします。たとえば、 'admin' 「custom」はnavbarMenu 2を取得し、このメニュー内ではtabPanel 22のみを表示しますが、「custom」は「admin」、navbarMenusとすべてのtabPanelsは表示する必要があります。この最小限の例では

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を初期化できません。さらにを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) 
+0

ありがとう、Geovany、多くの助けとなりました。もう1つの質問:あなたは誰もが隠されたコンテンツを表示するのは簡単だと述べました。理由を説明できますか?ありがとう。 – laurenzo

関連する問題