闪亮:根据索引动态添加/删除 textInput 行
Shiny: dynamically add/ remove textInput rows based on index
基于this article我更改了我的脚本:
library(shiny)
ui = fluidPage(
actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
tags$div(id = 'placeholder')
)
server = function(input, output) {
## keep track of elements inserted and not yet removed
inserted <- c()
observeEvent(input$add, {
id <- ''
insertUI(
selector = "#placeholder",
where = "beforeBegin",
ui =tags$div(
id = id,
fluidRow(
column(2,
textInput("alias", label = h5("first"))
),
column(2,
textInput("pop", label = h5("second"))
),
column(2,
textInput("parent", label = h5("third"))
),
column(2,
textInput("dims", label = h5("fifth"))
),
column(2,
textInput("method", label = h5("fourth"))
),
column(2,
textInput("args", label = h5("sixth"))
)
)
)
)
inserted <<- c(inserted, id)
})
observeEvent(input$remove, {
removeUI(
## pass in appropriate div id
selector = paste0('#', inserted[length(inserted)])
)
inserted <<- inserted[-length(inserted)]
})
}
shinyApp(ui = ui, server = server)
我查看了 ,但比 before.The 更困惑 add
按钮工作正常,但点击 remove
按钮时行不会消失。我做错了什么?
谢谢!
除了 id 的分配,你们都非常接近。
你忘记设置id了吗?我看到的唯一作业是:id <- ''
。
此外,您应该使用 reactiveValues()
而不是闪亮的全局变量。
请参阅下面的改编代码:
library(shiny)
ui = fluidPage(
actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
tags$div(id = 'placeholder')
)
server = function(input, output) {
## keep track of elements inserted and not yet removed
inserted <- reactiveValues(val = 0)
observeEvent(input$add, {
id <- length(inserted$val) + 1
insertUI(
selector = "#placeholder",
where = "beforeBegin",
ui =tags$div(
id = id,
fluidRow(
column(2,
textInput("alias", label = h5("first"))
),
column(2,
textInput("pop", label = h5("second"))
),
column(2,
textInput("parent", label = h5("third"))
),
column(2,
textInput("dims", label = h5("fifth"))
),
column(2,
textInput("method", label = h5("fourth"))
),
column(2,
textInput("args", label = h5("sixth"))
)
)
)
)
inserted$val <- c(inserted$val, id)
print(inserted$val)
})
observeEvent(input$remove,{
print(inserted$val)
removeUI(
## pass in appropriate div id
selector = paste0('#', inserted$val[length(inserted$val)])
)
inserted$val <- inserted$val[-length(inserted$val)]
})
}
shinyApp(ui = ui, server = server)
基于this article我更改了我的脚本:
library(shiny)
ui = fluidPage(
actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
tags$div(id = 'placeholder')
)
server = function(input, output) {
## keep track of elements inserted and not yet removed
inserted <- c()
observeEvent(input$add, {
id <- ''
insertUI(
selector = "#placeholder",
where = "beforeBegin",
ui =tags$div(
id = id,
fluidRow(
column(2,
textInput("alias", label = h5("first"))
),
column(2,
textInput("pop", label = h5("second"))
),
column(2,
textInput("parent", label = h5("third"))
),
column(2,
textInput("dims", label = h5("fifth"))
),
column(2,
textInput("method", label = h5("fourth"))
),
column(2,
textInput("args", label = h5("sixth"))
)
)
)
)
inserted <<- c(inserted, id)
})
observeEvent(input$remove, {
removeUI(
## pass in appropriate div id
selector = paste0('#', inserted[length(inserted)])
)
inserted <<- inserted[-length(inserted)]
})
}
shinyApp(ui = ui, server = server)
我查看了 add
按钮工作正常,但点击 remove
按钮时行不会消失。我做错了什么?
谢谢!
除了 id 的分配,你们都非常接近。
你忘记设置id了吗?我看到的唯一作业是:id <- ''
。
此外,您应该使用 reactiveValues()
而不是闪亮的全局变量。
请参阅下面的改编代码:
library(shiny)
ui = fluidPage(
actionButton("add", "Add new Row", icon=icon("plus", class=NULL, lib="font-awesome")),
actionButton("remove", "Remove last Row", icon=icon("times", class = NULL, lib = "font-awesome")),
tags$div(id = 'placeholder')
)
server = function(input, output) {
## keep track of elements inserted and not yet removed
inserted <- reactiveValues(val = 0)
observeEvent(input$add, {
id <- length(inserted$val) + 1
insertUI(
selector = "#placeholder",
where = "beforeBegin",
ui =tags$div(
id = id,
fluidRow(
column(2,
textInput("alias", label = h5("first"))
),
column(2,
textInput("pop", label = h5("second"))
),
column(2,
textInput("parent", label = h5("third"))
),
column(2,
textInput("dims", label = h5("fifth"))
),
column(2,
textInput("method", label = h5("fourth"))
),
column(2,
textInput("args", label = h5("sixth"))
)
)
)
)
inserted$val <- c(inserted$val, id)
print(inserted$val)
})
observeEvent(input$remove,{
print(inserted$val)
removeUI(
## pass in appropriate div id
selector = paste0('#', inserted$val[length(inserted$val)])
)
inserted$val <- inserted$val[-length(inserted$val)]
})
}
shinyApp(ui = ui, server = server)