操作按钮未在闪亮模块中更新

问题描述 投票:0回答:1

我正在尝试更新

ActionButton
的标签和图标,我知道也有类似的问题,但我似乎无法让它发挥作用。

nameUI <- function(id) {
  
  ns <- NS(id)
  tagList(
    actionButton(NS(id, "run"), "Run", icon = icon("bolt"))
  )
}

nameServer <- function(id) {
  moduleServer(id, function(input, output, session) {

    observeEvent(input$run, {
      ns <- session$ns
      updateActionButton(session, inputId = ns("run"), label = "Running", icon = icon("sync", class = "fa-spin"))
      print("Running")
      Sys.sleep(3)
      updateActionButton(session, inputId = ns("run"), label = "Run Done", icon = icon("bolt"))
      print("Done")
    })
    
    
  })
  

  
}

app <- function() {
  ui <- fluidPage(
    nameUI("test")
  )
  server <- function(input, output, session) {
    nameServer("test")
  }
  shinyApp(ui, server)  
}

app()
r shiny
1个回答
0
投票

模块的任何问题都与仅在

updateActionButton
末尾执行的
observeEvent
事件的主要问题无关,因此我将其排除在外。您可以在这里看到,只有最后的
updateActionButton
才有效果。
bslib::input_task_button
做了你想做的事。唯一的限制是,虽然有
bslib::update_task_button
,但它似乎无法像
label
那样更新
updateActionButton
值。如果这是必要的,那么使用一些 javascript 就可以实现。

library(shiny)

  ui <- fluidPage(
    actionButton("run1", "Run", icon = icon("bolt")),
    bslib::input_task_button("run2", "Run", icon = icon("bolt"), label_busy = "Running")
  )

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

    observeEvent(input$run1, {
      updateActionButton(session, "run1", label = "Running", icon = icon("sync", class = "fa-spin"))
      Sys.sleep(3)
      updateActionButton(session, "run1", label = "Run Done", icon = icon("bolt"))
    })

    observeEvent(input$run2, {
      Sys.sleep(3)
    })

  }

  shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.