r - 带有 Shiny 模块的 updateTabsetPanel
问题描述
updateTabsetPanel
在Shiny 模块中调用有问题,没有问题也可以正常工作。
library(shiny)
mod_ui <- function(id){
ns <- NS(id)
tagList(
actionButton(ns("back"), "back")
)
}
mod <- function(input, output, session){
observeEvent(input$back, {
print("Button click, go back to home tab")
updateTabsetPanel(session = session, inputId = "tabs", selected = "home")
})
}
ui <- navbarPage(
"example",
id = "tabs",
tabPanel(
"home",
h4("updateTabsetPanel does not work with modules"),
h5("But the button below does"),
actionButton("switch", "switch")
),
tabPanel(
"secondtab",
mod_ui("second")
)
)
server <- function(input, output, session){
callModule(mod, "second")
observeEvent(input$switch, {
updateTabsetPanel(session = session, inputId = "tabs", selected = "secondtab")
})
}
shinyApp(ui, server)
解决方案
模块的设计方式使得每个模块都是绝对独立的。如果您需要与调用模块的父级通信,则需要显式传递参数。这是如何完成的:
library(shiny)
mod_ui <- function(id){
ns <- NS(id)
tagList(
actionButton(ns("back"), "back")
)
}
mod <- function(input, output, session,parent_session){
observeEvent(input$back, {
print("Button click, go back to home tab")
updateTabsetPanel(session = parent_session, inputId = "tabs", selected = "home")
})
}
ui <- navbarPage(
"example",
id = "tabs",
tabPanel(
"home",
h4("updateTabsetPanel does not work with modules"),
h5("But the button below does"),
actionButton("switch", "switch")
),
tabPanel(
"secondtab",
mod_ui("second")
)
)
server <- function(input, output, session){
callModule(mod, "second",parent_session = session)
observeEvent(input$switch, {
updateTabsetPanel(session = session, inputId = "tabs", selected = "secondtab")
})
}
shinyApp(ui, server)
父session
级显式传递给模块。
推荐阅读
- reactjs - React Js 只加载第一个 SVG
- apache - 将 apache cassandra-3.11.x 作为一项服务安装在 centos 上离线需要 stpes?
- angular - Subject not working between two unrelated components
- javascript - How can I ensure an if loop waits for and receives a result before running the next if loop in sequence
- python - 如何修改 url.py 以在最新的 django 版本中运行?
- javascript - 为什么 Promise 中的 Promise.resolve 会在 Promise 之前执行?
- java - 如何阻止项目依赖被 Gradle 中的另一个项目替换?
- python - 为什么我的代码返回 True 而不是 False?
- javascript - 尽管调试器另有说明,为什么这个变量不被认为是 0?
- css - 有没有办法检查用户的浏览器主题是什么颜色?