Rshiny-禁用选项卡/向选项卡添加文本

Rshiny-禁用选项卡/向选项卡添加文本,r,tabs,shiny,R,Tabs,Shiny,我有一个闪亮的标签问题。我想创建一个带有两个选项卡的导航页面。对他们,我想插入一些用户的登录详细信息。没有“文本”或其他选项可在navbarPage中插入文本。但我创建了一个附加选项卡: library(shiny) runApp(list( ui = navbarPage( title="My App", tabPanel("tab1 title"), tabPanel("tab2 title"), tabPanel("U

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

library(shiny)
runApp(list(
    ui = navbarPage(
        title="My App",
        tabPanel("tab1 title"),
        tabPanel("tab2 title"),
        tabPanel("User: Madzia")),
    server = function(input, output) { }
))
这样可以,但我不希望第三个选项卡是“可选择的”:我希望它被禁用,这样我们就不能点击它-与“我的应用”文本相同。你知道如何处理这个问题吗?
非常感谢。最好的,Madzia

你可以用一点点javascript禁用一个选项卡。我有一个关于如何在最近的博客文章中隐藏标签(而不是禁用)的示例,您可以看到相关代码。我修改了一点代码来禁用它

这段代码是有黑客行为的,因为它在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]")
    })
  }
)
库(闪亮)
图书馆(shinyjs)

jscode您可以使用少量javascript实现禁用选项卡。我有一个关于如何在最近的博客文章中隐藏标签(而不是禁用)的示例,您可以看到相关代码。我修改了一点代码来禁用它

这段代码是有黑客行为的,因为它在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]")
    })
  }
)
库(闪亮)
图书馆(shinyjs)

jscode我想保留我以前的答案,因为它可能对将来想知道如何禁用选项卡的人有用

但是对于这个特定的问题,禁用选项卡不是正确的方法。简单地向选项卡添加文本更有意义(正如瓦尔特在评论中指出的)。如果您查看有关引导的文档,它会说您可以通过使用class
navbar text
添加html元素,将文本添加到navbar中。我对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)
库(闪亮)

navbarPageWithText我想保留我以前的答案,因为它可能对将来想知道如何禁用选项卡的人有用

但是对于这个特定的问题,禁用选项卡不是正确的方法。简单地向选项卡添加文本更有意义(正如瓦尔特在评论中指出的)。如果您查看有关引导的文档,它会说您可以通过使用class
navbar text
添加html元素,将文本添加到navbar中。我对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)
库(闪亮)

navbarPageWithText嗨Dean!我认为Madzia想要的是导航菜单中的一些文本来显示登录信息。在引导中,这是通过以Madzia身份登录的

完成的。。。但不确定使用shiny的正确方法是什么…这是一个笑脸,但使用文本而不是搜索框…@valterbiković你可以看到我的另一个答案,看到一种简单优雅的方法,而不必用原始HTML重写整个导航栏。谢谢你指出这一点,真的,真的很好。很高兴你回答了另一个问题,因为其中一个建议的解决方案肯定是最好的。也许可以用navbarExtra()函数扩展shinyjs?谢谢。我简单地考虑了一下,但是我只添加了新的函数,如果我认为它们对足够多的人有用的话,我只想用大量对每个人都有用的函数来压倒这个包。所以,希望这些线程在未来能对人们有足够的帮助!嗨,迪恩!我认为Madzia想要的是导航菜单中的一些文本来显示登录信息。在引导中,这是通过以Madzia身份登录的

完成的。。。但不确定使用shiny的正确方法是什么…这是一个笑脸,但使用文本而不是搜索框…@valterbiković你可以看到我的另一个答案,看到一种简单优雅的方法,而不必用原始HTML重写整个导航栏。谢谢你指出这一点,真的,真的很好。很高兴你回答了另一个问题,因为其中一个建议的解决方案肯定是最好的。也许可以用navbarExtra()函数扩展shinyjs?谢谢。我简单地考虑了一下,但是我只添加了新的函数,如果我认为它们对足够多的人有用的话,我只想用大量对每个人都有用的函数来压倒这个包。所以,希望这些线程在未来能对人们有足够的帮助!