我试图模块化一个复杂的Shiny应用程序,我conditionalPanel应该只在给定某个输入状态时出现.
在我将所有内容都模块化之前,输入和conditionalPanel都在ui.R,我可以使用以下内容引用输入:
conditionalPanel("input.select == 'Option one'", p('Option one is selected'))
Run Code Online (Sandbox Code Playgroud)
现在我已经模块化了,访问输入更加复杂.我认为以下是这样做的方法,但它并不是很有效.(这里我把东西组合成一个独立的脚本):
library(shiny)
## Module code for 'selectorUI' and 'selector'
selectorUI <- function(id) {
ns <- NS(id)
selectizeInput(inputId = ns('select'),
label = 'Make a choice:',
choices = c('Option one', 'Option two'))
}
selector <- function(input, output, session) {
reactive(input$select)
}
## Main app
ui <- shinyUI(fluidPage(
selectorUI('id1'),
conditionalPanel(condition = "output.selected == 'Option one'", p('Option one is selected.'))
))
server <- shinyServer(function(input, output, session) {
output$selected <- callModule(selector, …Run Code Online (Sandbox Code Playgroud)