目标是拥有一个闪亮的模块ui1.R
加载第二个模块ui2.R
当按钮confirm
被点击。我认为问题是is.null(input$confirm)
总是无效的。我需要的是仅使表达式无效一次confirm
被点击。
这个问题非常接近输入密码后启动Shiny应用程序 https://stackoverflow.com/questions/28987622/starting-shiny-app-after-password-input,但我正在尝试模块化解决方案。
ui.R
library(shiny)
library(shinyjs)
htmlOutput("page")
server.R
rm(list = ls())
library(shiny)
library(dplyr)
library(shinyjs)
Logged <- FALSE
shinyServer(function(input, output) {
source('ui1.R') #login page
source('ui2.R')
observeEvent(!is.null(input$confirm), {
Logged <<- T
})
observe({
if (Logged == FALSE) {
output$page <- renderUI({
ui1Output('ui1Output')
})
output$lsuId <- renderText({ input$lsuId })
}
if (Logged == TRUE)
{
output$page <- renderUI({ ui2 })
}
})
callModule(ui1,'ui1')
})
ui1.R
library(shinyjs)
ui1Output <- function(id, label = "ui1") {
ns <- NS(id)
shinyUI(fluidPage(
useShinyjs(),
titlePanel("Form"),
div(textInput(ns("lsuId"), "This has to be filled", ""),
actionButton(ns("confirm"), "Submit", class = "btn-primary")
)
))
}
ui1 <- function(input, output, session) {
observe({
LSUID <- reactive({ input$lsuId })
shinyjs::toggleState(id = "confirm", condition = LSUID())
})
}
ui2.R
ui2<- shinyUI(fluidPage(
div("well done!")
))
global.R
source('ui1.R') #login page
source('ui2.R')