我想显示控制栏(右边栏)只为几个标签在左边栏。
library(shiny)
library(bs4Dash)
shinyApp(
ui = dashboardPage(
header = dashboardHeader(
title = "My dashboard"
),
sidebar = dashboardSidebar(
sidebarMenu(
id = "sidebarMenu",
menuItem(
text = "Tab 1",
tabName = "tab1"
),
menuItem(
text = "Tab 2",
tabName = "tab2"
)
)
),
body = dashboardBody(),
controlbar = dashboardControlbar(),
title = "DashboardPage"
),
server = function(input, output) { }
)
我试着开发一个闪亮的应用程序,其中一些标签页需要一个控制栏,另一些标签页的控制栏应该显示某些选项,而另一些标签页则是显而易见的。什么是最优雅的方式来确保这一点?我应该将外观“外包”到单独的模块中,还是有其他建议?
1条答案
按热度按时间lawou6xi1#
这是可能的,而且有很多不同的方法来实现这一点。不同的方法有其优点和缺点。我可以演示最常用的条件UI元素的基本Shiny方法。在“每个选项卡的条件UI问题”的“简单”解决方案中,共同的事情是以某种方式评估用户当前查看的选项卡。
第一种方法是检查Javascript上下文并使用
conditionalPanel
调整UI:其好处是由于在UI(客户端)内部进行计算,因此渲染速度明显更快。缺点是我们必须使用Javascript(这是我们可能不想做的),而且我们在UI函数中创建逻辑,使其更加混乱。
下一个方法是使用R,在Server函数中呈现UI的某些部分,并将其发送到UI中的输出函数
这样做的好处是我们在服务器函数中有了逻辑,用户界面也变得更加简洁。不足之处是我们给服务器增加了额外的计算工作,这可以在客户端完成。我们还必须编写一些
if else
语句或map
或apply
,并且不清楚应该在服务器函数中呈现多少UI。如果你想添加一个特性,它也会变得更加复杂,所以如果你不小心,提前计划React性等,你经常会在开发过程中重写很多。