问题
我使用下面的代码动态更改
shinydashboard::box
通过javascript。这在原则上是可行的,但是
plotOutput
在框中,无法按大小正确重新渲染。也就是说,无论周围的大小,打印宽度都保持不变
box
. 很有趣,当我用
Inspect
在Chrome中,要查看源代码,图形会突然调整大小。
截图
问题
如何调整代码以调整绘图的大小
input$cols
变化?必须指出的是,在我的实际代码中,框的内容是通过模块动态呈现的。因此,我无法控制
renderPlot
功能本身。当我一“检查”图像,它就会被调整大小,我希望有一个javascript函数可以调用,它为我做这项工作。
代码
library(shiny)
library(shinydashboard)
library(shinyjs)
library(glue)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(selectInput("cols", NULL, c(2, 3, 4, 6, 12), 4)),
dashboardBody(
useShinyjs(),
div(
box(solidHeader = TRUE,
title = "Box",
width = 4,
status = "info",
sliderInput("sld", "n:", 1, 100, 50),
plotOutput("plt")
), id = "box-parent")
))
server <- function(input, output) {
observe({
cols <- req(input$cols)
runjs(code = glue('var $el = $("#box-parent > :first");',
'$el.removeClass(function (index, className) {{',
'return (className.match(/(^|\\s)col-sm-\\d+/g) || []).join(" ")',
'}});',
'$el.addClass("col-sm-{cols}");'))
})
output$plt <- renderPlot(plot(rnorm(input$sld), rnorm(input$sld)))
}
shinyApp(ui, server)