如何在闪亮中创建登录页面?

2024-03-19

目标是拥有一个闪亮的模块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')

我认为你这里有两个问题:

首先,您的确认按钮值存储在这里:input$"ui1Output-confirm"而不是这里:input$confirm

我建议更换:

observeEvent(is.null(input$confirm), {
  Logged <<- F
})

By:

observeEvent(input$"ui1Output-confirm", {
    Logged <<- T
})

那么您的观察函数不包含对按钮的任何引用,因此当用户单击它时它不会执行。我没有合适的解决方案,但一个简单的技巧是添加:

tmp <- input$"ui1Output-confirm"

在观察部分的开头:

observe({
    tmp <- input$"ui1Output-confirm"

    if (Logged == FALSE) {
        output$page <- renderUI({ 
            ui1Output('ui1Output') 
        })
        output$lsuId <- renderText({ input$lsuId })
    }
    if (Logged == TRUE) 
    {
         output$page <- renderUI({ ui2 })
    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在闪亮中创建登录页面? 的相关文章

随机推荐