2016-04-26 34 views
0

我想在特定條件下隱藏/顯示tabpanel。當選擇「源2」時,我想隱藏tab2,但是我使用的代碼有一個錯誤。 如果我第一次選擇「源1」,然後單擊「tab2」,並將數據源更改爲「源2」,則「tab2」tabpanel確實隱藏,但「tab2」的內容涵蓋「tab1」 。我怎樣才能刪除隱藏標籤的結果?任何想法將不勝感激。如何清除隱藏在有光澤的tabpanel時的殘留

library(shiny) 
library(shinyjs) 

runApp(list(
    ui = fluidPage(
    useShinyjs(), 
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"), 
    tabsetPanel(
     id = "navbar", 
     tabPanel(title = "tab1", 
       value = "tab1", 
       h1("Tab 1") 
    ), 
     tabPanel(id="id2", title = "tab2", 
       value = "tab2", 
       h1("Tab 2") 
    ) 
    ) 
), 
    server = function(input, output) { 
    observeEvent(input$dataSource,{ 
     toggle(condition = (input$dataSource !='source 2'), selector = "#navbar li a[data-value=tab2]") 
    }) 
    } 
)) 

[錯誤看起來像這樣] [1] [1]:http://i.stack.imgur.com/eOHLS.png

+0

不知何故,您的代碼在我的電腦上正常工作,沒有任何錯誤。 –

回答

0

我能複製我的筆記本電腦的錯誤。

我的建議是使用renderUI函數動態創建tabsetPanel

library(shiny) 
# library(shinyjs) 

runApp(list(
    ui = fluidPage(
    #useShinyjs(), 
    selectInput('dataSource',h5("Please choose the data source:"), c("source 1", "source 2"), "source 1"), 
    uiOutput("dynamic") 

), 
    server = function(input, output) { 

    output$dynamic <- renderUI({ 

     if (input$dataSource == "source 1") { 

     tabsetPanel(
      id = "navbar", 
      tabPanel(title = "tab1", 
        value = "tab1", 
        h1("Tab 1") 
     ), 
      tabPanel(id="id2", title = "tab2", 
        value = "tab2", 
        h1("Tab 2") 
     ) 
     ) 
     } else { 
     tabsetPanel(
      id = "navbar", 
      tabPanel(title = "tab1", 
        value = "tab1", 
        h1("Tab 1") 
     ) 
     ) 
     } 
    }) 
    } 
))