2017-04-20 116 views
0

我正在構建一個閃亮的應用程序,我想刷新主面板屏幕。這是一個示例代碼。我有一個提交按鈕來顯示數據,我有一個重新按鈕來清除屏幕。我不太確定如何在R中編寫重新生成的按鈕,因爲我是新手。感謝您尋找到使用動作按鈕刷新閃亮的主面板屏幕

library(DT) 
ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
     selectInput("amountTable", "Amount Tables", 1:10), 
     actionButton("submit1" ,"Submit", icon("refresh"), 
        class = "btn btn-primary"), 

     actionButton("refresh1" ,"Refresh", icon("refresh"), 
        class = "btn btn-primary") 

    ), 
    mainPanel(
    # UI output 
    uiOutput("dt") 
    ) 
) 
) 

server <- function(input, output, session) { 
    observeEvent(input$submit1, { 
    lapply(1:input$amountTable, function(amtTable) { 
     output[[paste0('T', amtTable)]] <- DT::renderDataTable({ 
     iris[1:amtTable, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    tagList(lapply(1:10, function(i) { 
    dataTableOutput(paste0('T', i)) 
    })) 
}) 

} 

shinyApp(ui, server) 

回答

2

如果使用刷新按鈕,您可以添加從renderUI()任何回報的可能性。 因爲重置一個動作按鈕並不是那麼直截了當,你必須使用一個變通變量的解決方法。

if(global$refresh) return()

這種反應變量,您可以用刷新控制和提交按鈕 例如if(input$refresh1) isolate(global$refresh <- TRUE) 你包裹在獨立的觀察功能。 Full code see below:

library(DT) 
ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput("amountTable", "Amount Tables", 1:10), 
     actionButton("submit1" ,"Submit", icon("refresh"), 
        class = "btn btn-primary"), 

     actionButton("refresh1" ,"Refresh", icon("refresh"), 
        class = "btn btn-primary") 

    ), 
    mainPanel(
     # UI output 
     uiOutput("dt") 
    ) 
) 
) 

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

    global <- reactiveValues(refresh = FALSE) 

    observe({ 
    if(input$refresh1) isolate(global$refresh <- TRUE) 
    }) 

    observe({ 
    if(input$submit1) isolate(global$refresh <- FALSE) 
    }) 

    observeEvent(input$submit1, { 
    lapply(1:input$amountTable, function(amtTable) { 
     output[[paste0('T', amtTable)]] <- DT::renderDataTable({ 
     iris[1:amtTable, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    if(global$refresh) return() 
    tagList(lapply(1:10, function(i) { 
     dataTableOutput(paste0('T', i)) 
    })) 
    }) 

} 

shinyApp(ui, server) 
+0

這正是我所期待的。謝謝你是一個拯救生命的人。還有一點,有一種方法可以在我點擊刷新按鈕後將選擇輸入刷新回1。現在它刷新主面板,但selectinput不會初始化爲1.請欣賞它! – aotearoa

+0

'if(input $ refresh1)isolate(global $ refresh < - TRUE)'''後面加'updateSelectInput(session,「amountTable」,「Amount Tables」,1:10,1)'' – BigDataScientist

+0

對不起,我在主面板上顯示一個文本,例如每個表的Amount.Table1,Amount.Table2等。看來paste0不起作用。欣賞它! – aotearoa