2016-04-26 32 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") 
     ) 
     ) 
     } 
    }) 
    } 
))