我试图在我的“首页” tabPanel上建立指向应用程序所有其他tabPanel的链接。
这个想法如下:
ui = navbarPage("",
tabPanel("home",
fluidPage(
fluidRow(box("this 1st box should lead me to tab1a")),
fluidRow(box("this 2nd box should lead me to tab1b")),
fluidRow(box("this 2nd box should lead me to tab2")))
),
navbarMenu("tab1",
tabPanel("tab1a"),
tabPanel("tab1b")),
tabPanel("tab2")
)
shinyApp(ui, server=function(input, output) {})
Run Code Online (Sandbox Code Playgroud)
我已经在Shiny的“添加链接面板”选项卡中看到了带有各种顶级导航栏的答案,但是我无法在我的代码中实现它,因为它处理的是html(我以前从未用过,所以我没有熟悉函数等),并且代码考虑带有相同选项卡的paneltabs(不确定这是为什么它在这里不起作用的原因,如果可能因为我要链接的选项卡在navbarpage上而不起作用) )。
谁能帮助我或告诉我在哪里可以学习如何在我的示例中实现它?
我猜这个答案是纯JavaScript的,但是很小。由于Shiny使用随机数ID创建标签,并且不提供对其使用的ID的访问权限,因此必须在客户端进行。但是,没有JavaScript知识可以将其实现到其他方案。JavaScript部分仅用于复制/粘贴,并且触发命令易于理解。
我做了什么 我安装了一个函数,该函数找到与所需选项卡相对应的导航栏链接,然后单击它。可以使用“ onclick”属性将该实用程序添加到任何元素。不需要特殊标签(例如,不需要“ a”标签)。
下面的代码应可以轻松自定义此解决方案以满足您的需求。
注意:box尽管没有任何视觉效果,但我将原始代码与一起使用。
码:
library(shiny)
library(shinydashboard)
ui = shinyUI(
navbarPage("Header",
tabPanel("home",
tags$head(tags$script(HTML('
var fakeClick = function(tabName) {
var dropdownList = document.getElementsByTagName("a");
for (var i = 0; i < dropdownList.length; i++) {
var link = dropdownList[i];
if(link.getAttribute("data-value") == tabName) {
link.click();
};
}
};
'))),
fluidPage(
fluidRow(box("this 1st box should lead me to tab1a", onclick = "fakeClick('tab1a')")),
fluidRow(box("this 2nd box should lead me to tab1b", onclick = "fakeClick('tab1b')")),
fluidRow(box("this 2nd box should lead me to tab2", onclick = "fakeClick('tab2')"))
)
),
navbarMenu("tab1",
tabPanel("tab1a", "Some Text inside Tab 1a."),
tabPanel("tab1b", "Some Text inside Tab 1b.")
),
tabPanel("tab2", "Some Text inside Tab 2.")
)
)
server = function(input, output, session){}
runApp(shinyApp(ui, server), launch.browser = TRUE)
Run Code Online (Sandbox Code Playgroud)
玩得开心!
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |