Rshiny - 禁用标签/向标签添加文字

时间:2016-11-22 12:18:29

标签: r tabs shiny

我有光泽标签的问题。我想创建一个带有两个选项卡的导航页面。他们的权利,我想插入一些用户的登录详细信息。没有选项“text”或其他在navbarPage中插入文本。但我创建了一个附加选项卡:

library(shiny)
runApp(list(
    ui = navbarPage(
        title="My App",
        tabPanel("tab1 title"),
        tabPanel("tab2 title"),
        tabPanel("User: Madzia")),
    server = function(input, output) { }
))

就像这样,但我不希望第三个标签是“可选的”:我希望它被禁用,这样我们就不能点击它 - 就像“我的应用程序”文本一样。你对如何处理这个问题有任何想法吗? 谢谢!最好的,Madzia

2 个答案:

答案 0 :(得分:1)

您可以使用一点点javascript来禁用选项卡。我在最近的博客文章中有一个如何隐藏选项卡(不禁用)的示例,您可以看到该here的代码。我修改了一些代码来禁用它。

这段代码是hacky,因为它在2分钟内完成,但适用于基本用例

library(shiny)
library(shinyjs)

jscode <- '
shinyjs.init = function() {
  $(".nav").on("click", ".disabled", function (e) {
    e.preventDefault();
    return false;
  });
}
'

css <- '
.disabled {
  background: #eee !important;
  cursor: default !important;
  color: black !important;
}
'

shinyApp(
  ui = fluidPage(
    useShinyjs(),
    extendShinyjs(text = jscode, functions = "init"),
    tags$style(css),
    checkboxInput("foo", "Disable tab2", FALSE),
    tabsetPanel(
      id = "navbar",
      tabPanel(title = "tab1",
               value = "tab1",
               h1("Tab 1")
      ),
      tabPanel(title = "tab2",
               value = "tab2",
               h1("Tab 2")
      ),
      tabPanel(title = "tab3",
               value = "tab3",
               h1("Tab 3")
      )
    )
  ),
  server = function(input, output) {
    observe({
      toggleClass(condition = input$foo,
                  class = "disabled",
                  selector = "#navbar li a[data-value=tab2]")
    })
  }
)

编辑我在发布答案时没有完全阅读问题,我只是看到你想要一种方法来禁用标签,这就是我的答案。您的特定用例(仅显示用于显示用户名称的选项卡)有点奇怪,但我认为这仍然有用...

答案 1 :(得分:1)

我想保留以前的答案,因为对于将来想要知道如何禁用标签的人来说,它可能会有用。

但是对于这个特定问题,禁用选项卡不是正确的方法。简单地向选项卡添加文本更有意义(正如Valter在评论中指出的那样)。如果您查看bootstrap的文档,它会说您可以通过添加类navbar-text的html元素将文本添加到导航栏中。我试验了一下HTML以确切地知道需要做什么,并创建了一个小函数,它将包裹navbarPage()以允许你向它添加文本。

以下是一个例子:

library(shiny)

navbarPageWithText <- function(..., text) {
  navbar <- navbarPage(...)
  textEl <- tags$p(class = "navbar-text", text)
  navbar[[3]][[1]]$children[[1]] <- htmltools::tagAppendChild(
    navbar[[3]][[1]]$children[[1]], textEl)
  navbar
}

ui <- navbarPageWithText(
  "Test app",
  tabPanel("tab1", "tab 1"),
  tabPanel("tab2", "tab 2"),
  text = "User: Dean"
)

server <- function(input, output, session) {
}

shinyApp(ui = ui, server = server)