我有光泽标签的问题。我想创建一个带有两个选项卡的导航页面。他们的权利,我想插入一些用户的登录详细信息。没有选项“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
答案 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)