更新actionButton的标签

时间:2015-11-18 10:48:09

标签: r shiny

我知道已经回答了类似的question,但是解决方案在string-input上创建了一个带有不同标签的新actionButton。我需要的是保留按钮(按钮的计数器),因为当我更改标签并创建一个新按钮时,它的计数器为0(未点击)。

所以基本上我需要类似更新功能的东西,只需在按下时更改actionButton的标签。按一下,标签就会改变。

input$Button <- renderUI({
    if(input$Button >= 1) label <- "new label"
    else label <- "old label"
    actionButton("Button", label = label)
})

这样的东西,但没有重置按钮的值(通过创建一个全新的)。

谢谢!

2 个答案:

答案 0 :(得分:3)

  1. reactiveValues()可以提供帮助。有关详细信息,请查看http://shiny.rstudio.com/articles/reactivity-overview.html。 在以下示例中,我将您的input$Button重命名为input$click,以避免双重使用“Button”名称。 由于我们将标签包装在renderUI()中,input$click最初会在创建后触发吗?!?,这就是我放置标签的原因 条件为:if(vars$counter >= 2)

  2. 另一种解决方案可能是删除只读属性(在此处找到:https://github.com/rstudio/shiny/issues/167

    attr(input, "readonly") <- FALSE
    input$click <- 1
    
  3. 举个例子 将以下内容粘贴到R控制台中:

    ui <- bootstrapPage(
        uiOutput('Button')
    )
    
    server <- function(input, output) {
    
        # store the counter outside your input/button
        vars = reactiveValues(counter = 0)
    
        output$Button <- renderUI({
            actionButton("click", label = label())
        })
    
        # increase the counter
        observe({
            if(!is.null(input$click)){
                input$click
                isolate({
                    vars$counter <- vars$counter + 1
                })
            }
        })
    
        label <- reactive({
            if(!is.null(input$click)){
                if(vars$counter >= 2) label <- "new label"
                else label <- "old label"
            }
        })
    }
    
    # run the app
    shinyApp(ui = ui, server = server)
    

答案 1 :(得分:3)

您可以使用本机闪亮套餐中的updateActionButton

ui <- fluidPage(
  actionButton('someButton', ""),
  h3("Button value:"),
  verbatimTextOutput("buttonValue"),
  textInput("newLabel", "new Button Label:", value = "some label")
)

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

  output$buttonValue <- renderPrint({
    input$someButton
  })

  observeEvent(input$newLabel, {
    updateActionButton(session, "someButton", label = input$newLabel)
  })
}

shinyApp(ui, server)

enter image description here