我一直在使用imports: [ HttpClientModule ]
在我的闪亮应用中将图形显示为弹出窗口,但是当我将它们放入闪亮的模块中时,这些图形不会呈现。
下面的简短回复:非模块触发模态显示图形,模块触发模态将其空白。有人有主意吗?模态本身正确显示,模态的非反应内容也是如此(例如showModal(modalDialog(...))
)
ModalDialog('some text')
SessionInfo:
library(shiny)
# Module UI
myModuleUI = function(id){
ns = NS(id)
fluidRow(
actionButton(ns('button'), 'Module')
)
}
# Module server
myModule = function(input, output, session){
observeEvent(input$button, {
showModal(
modalDialog(
# This renderPlot does not display
renderPlot(ggplot2::qplot(mtcars$mpg))
)
)
})
}
# App UI
ui = fluidPage(
fluidRow(
actionButton('nonModule', 'Non-module'),
myModuleUI('module')
)
)
# App server
server = function(input, output) {
modalFunc = function() {
return(modalDialog(renderText("Non-Module"),
renderPlot(ggplot2::qplot(mtcars$mpg))))
}
observeEvent(input$nonModule, {
showModal(
modalDialog(
# This renderPlot does display
renderPlot(ggplot2::qplot(mtcars$mpg))
)
)
})
callModule(myModule, 'module')
}
# Run the application
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
在发布此答案后,我在GitHub上报告了这种行为以解决问题跟踪系统,并在几天后提供了A/B testing environment。因此,您可以从GitHub更新闪亮到最新版本,以使其工作。或者,使用我在下面提供的解决方案。
如果为绘图分配单独的output
插槽,则两个模态都能正常工作。
myModule = function(input, output, session){
output$plot <- renderPlot({
ggplot2::qplot(mtcars$mpg)
})
observeEvent(input$button, {
showModal(
modalDialog(
# This plot does display
plotOutput(session$ns("plot"))
)
)
})
}
我不确定是什么原因引起的。您是否观察到与其他渲染函数相同的行为?
在ui定义中使用renderXXX
的AFAIK(例如...
中的modalDialog
参数)仅适用于RMarkdown
个文档。例如,outputArgs
中?renderPlot
参数的文档读取
outputArgs 在交互式R Markdown文档中使用renderPlot时,要传递给plotOutput的隐式调用的参数列表。
在?markRenderFunction
中可以找到类似的陈述。所以
showModal(modalDialog(renderPlot(...)))
即使在RMarkdown
个文档之外工作,也是一个无证件,因此不可靠的功能。