RShiny:条件成功或错误消息,取决于NULL值

时间:2019-12-30 20:35:23

标签: r shiny sweetalert

我正在尝试将actionBttnsendSweetAlert一起用于一个闪亮的项目。此外,我希望通知用户是否存在无效输入(例如,空白文本输入)。

为此,我尝试在validate中使用observeEvent,该方法可以防止发出警报,但不提供诸如“请提供文字”之类的替代消息。

这是一个简单的例子:

library(shiny)
library(shinyWidgets)


ui <- fluidPage(
  useSweetAlert(),
  sidebarPanel(
    textInput("text", "Require This Text"),
  actionBttn(
    inputId = "submit",
    label = "Submit Form",
    color = "success",
    style = "float",
    block = TRUE)
  )

)

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

  observeEvent(input$submit,
               {
                 validate(
                   need(input$text, message = "Please provide a text")
                 )
                 sendSweetAlert(
                   session = session,
                   title = "Plz halp",
                   text = "Cool stuff doing neat things",
                   type = "success",
                   btn_labels = c("Great")
                 )}
               )
}

# Run the application 
shinyApp(ui = ui, server = server)

请注意,如果没有文本输入,SweetAlert函数将不起作用(这是一件好事),但是没有其他消息。

有没有一种干净的方法可以做到这一点?我考虑过一个if语句,如果任何值都为NULL,则显示SweetAlert错误,但是我不太想怎么做。

1 个答案:

答案 0 :(得分:1)

您可以使用#New Event, prints oh wow if someone says wow @client.event async def on_message(message): if "wow" in message.content: await channel.send("oh wow") #End of Event 来检查输入是否填写:

isTruthy

编辑:根据您的注释,您的代码将执行以下操作以避免重复操作。在全球或其他地方,.ake一个可以验证列表的函数

  observeEvent(input$submit,
               if(isTruthy(input$text)) {
                 sendSweetAlert(
                   session = session,
                   title = "Plz halp",
                   text = "Cool stuff doing neat things",
                   type = "success",
                   btn_labels = c("Great")
                 )
               } else {
                 sendSweetAlert(
                   session = session,
                   title = "Plz halp",
                   text = "Please Provide Text",
                   type = "error",
                   btn_labels = c("Sorry!")
                 )
               })

然后在您的服务器中,使表单数据成为反应式列表:

allTruthy <- function(l) {
    all(vapply(l, isTruthy, logical(1)))
}

现在,您的表单数据在一个不错的列表中,可供使用和验证。然后您的观察者可以是:

  t1Form <- reactive(list(
    pop_interest = input$t1_pop_interest,
    int_interest = input$t1_int_interest,
    comparator = input$t1_comparator,
    poutcome = input$t1_poutcome,
    setting = input$t1_setting
  ))