单击r中的操作按钮后的自定义消息

时间:2017-06-02 13:24:57

标签: shiny rstudio

如果点击动作按钮,我怎样才能获得自定义消息(消息包含一个迷你表,具体取决于被动值)?这是我的代码。该消息应包括反应表,我将其称为rows()。

 library(shiny)
 library(datasets)
 library(rhandsontable)
 library(data.table)


 my_message= writeLines("validation is not successful. \nCheck following 
 commodities:\nCPCCode  Commodity  Year")

 # This is the message I want when action button is clicked


 # validation is not successful. Please check the following commodities:

 #CPCCode    Commodity     Year
 # 100           Maize      2010
 # 200           Rice       2015
 # 300           Tea       2016
 # 400           Banana      2014
 #.
 #.
 #.
 # and so on. The table can be upto max 50 rows

 ui = fluidPage(

 actionButton("message", "message")
 )

 server = function(input,output,session){

 rows= reactive({


d=data.frame(CPCCode=100, Commodity="Maize", Year= 2010)
d$Commodity = as.character(d$Commodity)
d=rbind(d, c(200, "Rice", "2015"))
d=rbind(d, c(300,"Tea", 2016))

})


observeEvent(input$message,{
if (is.null(input$message) || input$message == 0){return()}

 isolate({
  input$message  
    the_message <- paste("validation is not successful")
    js_string <- 'alert("SOMETHING");'
    js_string <- sub("SOMETHING",the_message,js_string)
    session$sendCustomMessage(type='jsCode', list(value = js_string))  
    })

   })

}

 shinyApp(ui,server)

编辑。它仅显示表格的第一行。任何建议将不胜感激

library(shiny)
library(datasets)
library(rhandsontable)
library(data.table)


my_message= writeLines("validation is not successful. \nCheck following 
commodities:\nCPCCode  Commodity  Year")

# This is the message I want when action button is clicked


# validation is not successful. Please check the following commodities:

#CPCCode    Commodity     Year
# 100           Maize      2010
# 200           Rice       2015
# 300           Tea       2016
# 400           Banana      2014
#.
#.
#.
# and so on. The table can be upto max 50 rows



 ui = fluidPage(

  actionButton("show", "Show modal dialog")

  )

 server = function(input, output) {


 rows= reactive({


  d=data.frame(CPCCode=100, Commodity="Maize", Year= 2010)
  d$Commodity = as.character(d$Commodity)
  d=rbind(d, c(200, "Rice", "2015"))
  d=rbind(d, c(300,"Tea", 2016))

  })



 # Return the UI for a modal dialog with data selection input. If 'failed' 
 is
 # TRUE, then display a message that the previous value was invalid.
 dataModal <- function(failed = FALSE) {
 modalDialog(

  span("Validation is not successful", rows()),


  footer = tagList(

    actionButton("ok", "OK")
    )
   )
  }


 observeEvent(input$show, {
   showModal(dataModal())
   })


  observeEvent(input$ok, {

  removeModal()

  })


   }



      shinyApp(ui,server) 

1 个答案:

答案 0 :(得分:0)

要在modalDialog中显示表格,您需要在dataTableOutput内添加modalDialog,并在创建modalDialog后呈现表格。我已经编辑了你的服务器代码来做同样的事情。希望这会对你有所帮助。

server = function(input, output) {

    rows= reactive({
      d=data.frame(CPCCode=100, Commodity="Maize", Year= 2010)
      d$Commodity = as.character(d$Commodity)
      d=rbind(d, c(200, "Rice", "2015"))
      d=rbind(d, c(300,"Tea", 2016))

    })

    # Return the UI for a modal dialog with data selection input. If 'failed' 
    # is
    # TRUE, then display a message that the previous value was invalid.
    dataModal <- function(failed = FALSE) {
      modalDialog(

        span("Validation is not successful"),

        dataTableOutput("table"),

        footer = tagList(

          actionButton("ok", "OK")
        )
      )
    }


    observeEvent(input$show, {
      showModal(dataModal())
      output$table <- renderDataTable({rows()})
    })


    observeEvent(input$ok, {
      removeModal()
    })

  }