2016-11-16 55 views
0

我想創建一個閃亮的應用程序,允許我動態添加UI控件。但是,當前的代碼會爲每個新的UI小部件添加一個新行。有沒有辦法將它們添加到fluidRow中,以便每行最多需要4個小部件。有沒有辦法在一個Shiny應用程序中動態插入/添加UI中的fluidRow

此外,有沒有一種方法來添加/刪除控件小部件,而不會默認所有當前的選擇?我現在擁有的代碼基本上重新生成了控件,所有的時間點擊「添加」或「刪除」按鈕,這意味着所有選擇都會重置爲默認值。

非常感謝您的幫助。 代碼如下。

謝謝!

library(shiny) 

ui <- shinyUI(fluidPage(


    mainPanel(
    actionButton("add_btn", "Add Box"), 
    actionButton("rm_btn", "Remove Box"), 
    uiOutput("interactionUI")) 

)) 

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

    # Track the number of input boxes to render 
    counter <- reactiveValues(n = 0) 

    observeEvent(input$add_btn, {counter$n <- counter$n + 1}) 
    observeEvent(input$rm_btn, { 
    if (counter$n > 0) counter$n <- counter$n - 1 
    }) 


    interaction <- reactive({ 

    n <- counter$n 

    if (n > 0) { 
     lapply(seq_len(n), function(i) { 
     selectInput(inputId = paste0("item", i), 
        label = paste0("Item", i), choices=c("test","test2"), 
        selected = NULL, 
        multiple = 8, selectize = TRUE, width = "20%", size = NULL) 
     }) 
    } 

    }) 

    output$interactionUI <- renderUI({ interaction() }) 

}) 

shinyApp(ui, server) 
+1

看看insertUI/removeUI的演示https://gallery.shinyapps.io/111-insert-ui/ – Geovany

+0

嗨Geovany,謝謝你的提示。我的問題是,有沒有辦法將這些插入的UI放在fluidRow中。因此當您添加新的UI項目時,它將沿水平方向添加,而不是沿垂直方向堆疊所有新UI。 – YDao

回答

0

在流體行內添加一個id標記的div,然後引用此id作爲插入列的選擇器。

fluidRow(tags$div(id="rowLabel",column(4,"Example1",textOutput("example1")))) 

insertUI(selector = "#rowLabel",where = "afterEnd",ui = tags$div(id="columnLabel",column(4,"Example2",textOutput("example2")))) 

我將div id包裝添加到插入的列,以便稍後刪除。

相關問題