R Shiny:从另一个Shiny应用程序内部调用模块将它们限制在只有一半的屏幕上



我将几个小的Shiny应用程序封装到模块中。当从命令行单独调用这些模块时,它们按预期显示,填充整个页面。我想创建一个应用程序,用户可以从菜单中选择不同的模块。我一直在尝试用navbarPage和tabPanel做到这一点,但模块总是显示在我的屏幕的一半高度。

我试过在div/boxes中包装各种元素并改变它们的高度,但它只改变了我的模块周围的容器的高度,而不是模块本身。我对Shiny很陌生,我想我一定是误解了模块和调用它们的应用程序之间的关系。

可再生的例子:

WGStableUI <- function(id){ fluidPage(
dataTableOutput(NS(id,"dynamic"))
)
}
WGStableServer <- function(id){ 
moduleServer(id, function(input, output, session) {
#WGS_tbl <- tbl(connection,"WGS") %>% as_tibble()
#output$dynamic <- renderDataTable(WGS_tbl, options = list(pageLength = 5))
output$dynamic <- renderDataTable(mtcars, options = list(pageLength = 100))
})}
WGStableApp <- function() {
ui <- fluidPage(
WGStableUI("displayWGStable")
)
server <- function(input, output, session) {
WGStableServer("displayWGStable")
}
shinyApp(ui, server)  
}
library(shiny)
source("./WGS_table_module.R")
ui <- navbarPage("title",
tabPanel("page1"),
tabPanel("page2",WGStableApp())
)
server <- function(input, output){}
shinyApp(ui,server)

编辑:还在试图弄清楚这一点,我已经意识到,只是从另一个应用程序内部调用一个模块会导致一个问题,tabpanel没有效果。有滚动条,但我不能改变显示窗口的大小。同样的事情发生在

library(shiny)
ui <- WGStableApp()

server <- function(input, output, session) {

}
shinyApp(ui, server)

我一直不知道为什么会发生这种情况,但我确实找到了一个解决方案。我没有像上面那样一起调用UI和服务器模块,而是创建了另一个模块,它分别调用每个UI和服务器元素,然后我从应用程序中调用这个新模块。

的例子:

menu_ui <- function(id) {

navbarPage("Menu",
tabPanel("WGS Epi Table",WGStableUI(NS(id, "infotable")))
)

}
menu_server <- function(id) {

moduleServer(id, function(input, output, session) {

WGStableServer("infotable")

})

}
demo_menu <- function() {

ui <- fluidPage(menu_ui("demomenu"))

server <- function(input, output, session) {
menu_server("demomenu")
}
shinyApp(ui, server)

}

最新更新