R 使用侧边栏面板附加和删除选项卡
在删除新创建的选项卡时遇到问题 情景:R 使用侧边栏面板附加和删除选项卡,r,button,shiny,R,Button,Shiny,在删除新创建的选项卡时遇到问题 情景: 添加新选项卡“A” 添加新选项卡“B” 单击选项卡B上的删除-不删除 选择选项卡A,单击“删除”即可 我觉得这和身份证有关,被逻辑难住了 提前谢谢 library(shiny) library(shinyjs) ui <- fluidPage( useShinyjs(), navbarPage(title = "Test", id="tabs", t
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage(title = "Test", id="tabs",
tabPanel("Home",
sidebarPanel(
selectInput("testlist", "Select test:",
list("A", "B", "C")),
actionButton("append", "New tab")),
mainPanel()
)
)
)
server <- function(input, output, session) {
tabnamesinput<-reactive({
input$testlist
})
observeEvent(input$append,{
id<-paste0(tabnamesinput())
appendTab(inputId = "tabs",
tabPanel(id,
sidebarPanel(
actionButton("remove", "Delete")
)
)
)
})
observeEvent(input$remove,{
removeTab(inputId = "tabs", target = input$tabs)
})
}
shinyApp(ui, server)
库(闪亮)
图书馆(shinyjs)
ui使用上述方法,您试图为每个删除按钮分配相同的id=“remove”
。这行不通。每个按钮都需要自己的id
一旦每个按钮都有其唯一的id,您就需要一个观察员来监听这些按钮触发的所有事件。下面将查找与模式“^remove”
”匹配的所有输入:
库(闪亮)
图书馆(shinyjs)
非常感谢您的详细回复。你的gif/视频太棒了!
library(shiny)
library(shinyjs)
ui <- fluidPage(
useShinyjs(),
navbarPage(title = "Test", id = "tabs",
tabPanel("Home",
sidebarPanel(
selectInput("testlist", "Select test:", list("A", "B", "C"), selected = "A"),
actionButton("append", "New tab")),
mainPanel()
)
)
)
server <- function(input, output, session) {
observeEvent(input$append,{
appendTab(inputId = "tabs",
tabPanel(input$testlist,
sidebarPanel(
actionButton(paste0("remove_", input$testlist), "Delete")
)
)
)
})
observeEvent(lapply(grep(pattern = "^remove_", x = names(input), value = TRUE), function(x){input[[x]]}),{
if(input$tabs != "Home"){
removeTab(inputId = "tabs", target = input$tabs)
updateSelectInput(session, "testlist", selected = input$testlist) # keep the selection when re-rendering sidebarPanel
}
})
}
shinyApp(ui, server)