考虑以下应用:
ui <- basicPage(
actionButton('button1', 'click one'),
actionButton('button2', 'click two')
)
server <- function(input, output){
popup <- function(){
modalDialog(easyClose = T,
'popup window triggered')
}
}
shinyApp(ui=ui, server=server)
我的目标是,一旦单击任一按钮,就会触发模式窗口。我意识到我可以为每个按钮创建一个observeEvent
,但是在完整的应用程序中,不同的navbar
页面上将有许多按钮。因此,为了避免一大堆代码重复,我想将它们收集在一个observeEvent
中。我尝试了here的一些建议。
添加
observeEvent({
input$button1
input$button2
}, {
showModal(popup())
})
对server()
的并没有真正起作用,因为出于某些奇怪的原因,需要在button2
响应之前单击button1
。
相反,添加
observeEvent(c(input$button1, input$button2), {
showModal(popup())
})
使模式窗口已经在启动时出现,这应该不会发生。
那么有没有一种方法可以将多个动作按钮捕获到一个观察事件中而又没有这些不良行为?
答案 0 :(得分:0)
您需要为ignoreInit = TRUE
设置observeEvent
:
ui <- basicPage(
actionButton('button1', 'click one'),
actionButton('button2', 'click two')
)
server <- function(input, output){
popup <- function(){
modalDialog(easyClose = T,
'popup window triggered')
}
observeEvent(c(input$button1, input$button2), {
showModal(popup())
}, ignoreInit = TRUE)
}
shinyApp(ui=ui, server=server)