我在server.R
中从数据库初始加载数据需要几秒钟。在此之前,显示的页面会失真(选择框中的数据错误,框的奇怪位置,见下文)。
我希望在数据完全加载之前显示不同的页面(或至少在我的第一个显示的标签中显示不同的内容)。
我考虑使用基于专用全局变量(initial_loading_done)的条件来做某种conditionalPanel
,但是无论我在哪里尝试放置conditionalPanel
它都不起作用。
这是我的UI.R的结构:
shinyUI(
dashboardPage(
dashboardHeader(title = "Title"),
dashboardSidebar(
sidebarMenu(
menuItem("Tab1", tabName = "Tab1",icon = icon("dashboard")),
menuItem("Tab2", tabName = "Tab2", icon = icon("bar-chart-o"))
)
),
dashboardBody(
includeCSS("custom_css.css"),
tabItems(
tabItem(tabName = "Tab1",
fluidRow(<content>),
mainPanel(
fluidRow(<content>)
)
),
tabItem(tabName = "Tab2",
fluidRow(<content>),
mainPanel(
dataTableOutput('my_data_table')
)
)
)
)
)
)
答案 0 :(得分:22)
以下是使用shinyjs
包
我们的想法是在不同的ID下创建加载“页面”和内容“页面”,最初隐藏内容页面,并在应用程序准备好后使用show()
和hide()
library(shiny)
library(shinyjs)
load_data <- function() {
Sys.sleep(2)
hide("loading_page")
show("main_content")
}
ui <- fluidPage(
useShinyjs(),
div(
id = "loading_page",
h1("Loading...")
),
hidden(
div(
id = "main_content",
"Data loaded, content goes here"
)
)
)
server <- function(input, output, session) {
load_data()
}
shinyApp(ui = ui, server = server)
答案 1 :(得分:5)
在<PlatformToolset>
我想使用server
来存储reactiveValues()
条件。然后,在加载数据时,我的setupComplete
设置为setupComplete
。
在TRUE
中,我们可以在ui
中评估此setupComplete
条件,并仅显示内容(在我的示例中为三个conditionalPanel
小部件)。
这是一个有效的例子
box()
答案 2 :(得分:0)
代码
hidden(
div(
id = "main_content",
"Data loaded, content goes here"
)
不能使用tabsetPanel。但是,如果你将id移动到div级别,它可以很好地工作。感谢shinejs作者Dean Attali的提示。 https://stackoverflow.com/users/4432127/keshete
hidden(
div(id = "mainTabsetPanel",
tabsetPanel(
....