闪亮的应用程序:是否可以在验证消息中呈现HTML?

时间:2019-04-11 18:25:31

标签: r shiny

有什么方法可以在Shiny的验证消息中呈现HTML?我使用HTML包装器,tags$...函数以及用于验证消息的单独htmlOutput尝试了不同的方法,但没有任何一种起作用。这是一个显示此问题的简单示例应用程序-select在验证消息中应为粗体,但HTML标记已转义(我知道是人为的示例,但希望传达了这个想法,我主要希望使用此示例在邮件中包含fa图标)

runApp(
  list(
    ui = fluidPage(

      titlePanel("Validation App"),

      sidebarLayout(
        sidebarPanel(
          selectInput("data", label = "Data set", choices = c("", "mtcars"))
        ),

        mainPanel(tableOutput("table"))
      )
    ),

    server = function(input, output) {

      data <- reactive({ 

        # validate test
        validate(
          need(input$data != "", HTML("Please <strong>select</strong> a data set"))
        )

        get(input$data, 'package:datasets') 
      })

      output$table <- renderTable(head(data()))

    }

  )
)

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是使用uiOutput,并在renderUI函数内部放一个if来验证输入。在下面的代码中,是使用HTMLtags$...函数的示例。您还可以放置一个图标。

library(shiny)
runApp(
  list(
    ui = fluidPage(
      titlePanel("Validation App"),
      sidebarLayout(
        sidebarPanel(
          selectInput("data", label = "Data set", choices = c("", "mtcars"))
        ),
        mainPanel(uiOutput("tableUI"))
      )
    ),

    server = function(input, output) {
      data <- reactive({ 
        get(input$data, 'package:datasets') 
      })

      output$tableUI <- renderUI({
        if (input$data == "") {
          div(
            HTML("Please <strong>select</strong> a data set"),
            tags$p(icon("exclamation"), "Please",tags$strong("select"), "a data set")
          ) 
        } else {
          tableOutput("table")
        }
      })

      output$table <- renderTable(head(data()))
    }

  )
)