簡體   English   中英

在 Shiny 中僅顯示一個通知

[英]Show only one notification in Shiny

我想通過顯示通知來控制電話號碼:

  • 如果用戶輸入了錯誤的數字(如“aaaa”)
  • 如果用戶輸入一個長數字(大於 10 位)

我使用了 function showNotification來自shinycloseButton = FALSEduration = NULL

當用戶輸入錯誤的數字時,會彈出通知,但當他輸入長數字時,通知也會彈出,但前一個不會消失

我只想顯示一個通知(錯誤號碼或長號碼),但不能同時顯示兩者。 我們怎么能做到這一點? 這是我的應用程序:

library(shiny)
library(shinydashboard)
library(shinydashboardPlus)

############# UI ############
body <- dashboardBody(
  tabItems(
    tabItem(tabName = "tab1",
            fluidRow(
              tags$h1('my title'),
              
              textInput("phone_number", "enter your phone number", value = ""),
              
              actionButton("button", "go")
              
            )
    )
  )
  
  
)

ui <- dashboardPage(
  
  title = "Example",
  options = list(sidebarExpandOnHover = TRUE),
  header = dashboardHeader(disable = FALSE),
  sidebar = dashboardSidebar(
    minified = TRUE, collapsed = TRUE,
    sidebarMenu(id="menu",
                menuItem("first tab", tabName =  "mytab", icon = icon("fas fa-acorn"),
                         menuSubItem('menu1',
                                     tabName = 'tab1',
                                     icon = icon('fas fa-hand-point-right'))
                )
    )
  ),
  body
)


############# SERVER ############
server <- function(input, output) {
  
  
  
  observeEvent(
    input$button,
    {
      if(is.na(as.numeric(input$phone_number))) {
        showNotification(type = "error",
                         duration = NULL,
                         closeButton = FALSE,
                         "wrong number")
        
      } else if(nchar(input$phone_number)<10) {
        showNotification(type = "error",
                         duration = NULL,
                         closeButton = FALSE,
                         "too long (10 digits required)")
        
      }
    }
  )
  
  
}

############# RUN THE APP ############
shinyApp(ui = ui, server = server)

一些幫助將不勝感激

我不會在這里使用通知,因為它們將始終顯示固定的持續時間,並且在 window 的不同 position 上顯示,這可能會使用戶感到困惑。 我只會使用textOutput呈現消息:

library(shiny)
library(shinyjs)

ui <- fluidPage(
  useShinyjs(),
  textInput("phone_number", "phone number"),
  textOutput("phone_notification")
)

server <- function(input, output, session) {
  output$phone_notification <- renderText({
    if(input$phone_number == "") {
      "" # empty is ok
    }
    else if(is.na(as.numeric(input$phone_number))) {
      "wrong number"
    } else if (nchar(input$phone_number) > 10) {
      "too long"
    } else {
      "" # correct number
    }
  })
}

shinyApp(ui, server)

在此處輸入圖像描述

您還可以設置文本樣式,例如將其設置為紅色:

ui <- fluidPage(
  useShinyjs(),
  textInput("phone_number", "phone number"),
  tagAppendAttributes(
    textOutput("phone_notification"),
    style = "color:red"
  )
)

我需要OP要求的解決方案。 我發現以下代碼片段適用於我的情況:

    removeNotification(id = "onlyOnce", session = getDefaultReactiveDomain())
    showNotification("Show me once", id = "onlyOnce")

另見: https://search.r-project.org/CRAN/refmans/shiny/html/showNotification.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM