R 删除动态添加到闪亮UI的每个元素上的按钮
我正在尝试创建一个闪亮的应用程序,它有一个动态UI,可以添加任意数量的输入字段,每次单击一个操作按钮都会添加一个。一旦创建了这些新的输入,就应该通过单击与输入一起添加的另一个操作按钮来移除,而不是像这个问题中那样,例如从列表中选择要移除的元素 我在Shinny的动态UI文章中使用了两个示例:特别是:我不喜欢第一个示例要求您选择要删除的UI元素,然后单击以删除它的方式。我希望通过在每个新元素中添加一个删除按钮来完成这一点 基于这个堆栈溢出问题,我编写了下面的代码,以生成一个响应函数,该函数将侦听多个输入:,显然,您无法分割输入对象:,我也不知道如何让我的响应函数确定单击了哪个移除按钮,因此我认为这种方法是一条死胡同。我对闪亮和反应式编程还不熟悉,所以我不太了解所有的特性,我希望能得到一些建议,我可以用它们来实现这个结果R 删除动态添加到闪亮UI的每个元素上的按钮,r,shiny,R,Shiny,我正在尝试创建一个闪亮的应用程序,它有一个动态UI,可以添加任意数量的输入字段,每次单击一个操作按钮都会添加一个。一旦创建了这些新的输入,就应该通过单击与输入一起添加的另一个操作按钮来移除,而不是像这个问题中那样,例如从列表中选择要移除的元素 我在Shinny的动态UI文章中使用了两个示例:特别是:我不喜欢第一个示例要求您选择要删除的UI元素,然后单击以删除它的方式。我希望通过在每个新元素中添加一个删除按钮来完成这一点 基于这个堆栈溢出问题,我编写了下面的代码,以生成一个响应函数,该函数将侦听多
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
actionButton('addBtn', 'Add input Set'),
tags$div(id='inputList')
),
mainPanel()
)
)
server <- function(input, output) {
observeEvent(input$addBtn, {
n <- input$addBtn
id <- paste0("input",n)
insertUI(
selector = '#inputList',
ui=div(
selectizeInput(
inputId = id,
choices = c("Stuff","to","input"),
selected = c("Stuff"),
label = "An Input:",
multiple = TRUE
),
actionButton(paste0('removeBtn',n), 'Remove')
)
)
})
# removeModelReact <- reactive({input[grepl(pattern = "removeBtn",names(input))]},{
# # which button changed... and return that
# })
#
# eventReactive(removeModelReact(),{
# removeUI(
# selector = paste0('div:has(> #input',removeModelReact(),')')
# )
# })
}
shinyApp(ui, server)
库(闪亮)
ui嗨,这应该可以
server <- function(input, output) {
observeEvent(input$addBtn, {
nr <- input$addBtn
id <- paste0("input",input$addBtn)
insertUI(
selector = '#inputList',
ui=div(
id = paste0("newInput",nr),
selectizeInput(
inputId = id,
choices = c("Stuff","to","input"),
selected = c("Stuff"),
label = "An Input:",
multiple = TRUE
),
actionButton(paste0('removeBtn',nr), 'Remove')
)
)
observeEvent(input[[paste0('removeBtn',nr)]],{
shiny::removeUI(
selector = paste0("#newInput",nr)
)
})
})
服务器谢谢@beril barton我不会想到将第二个observeEvent()
放在第一个内部,这样就不需要在第一个观察者的范围之外跟踪按钮标识符。我不知道你能做出这样的反应。