问题描述
我正在使用widgetUserBox()
中的shinydashboardplus()
,而我正在尝试有条件地将服务器中的url字符串传递给UI中backgroundUrl
的{{1}}选项图像作为用户框的背景。这不起作用,并且该框仅默认为黑色背景,而不是跟随url链接到图像。
我能够成功地将文本从服务器传递到widgetUserBox的其他元素,即。标题,副标题和页脚,但无法使widgetUserBox()
跟随该链接。我尝试使用backgroundUrl
,renderText()
和renderUI()
来将url字符串传递给backgroundUrl,但都没有运气。是否有解决方案/变通办法,能够从服务器向url发送url字符串?
我在下面有一个例子:
verbatimtextoutput()
解决方法
这是在服务器端呈现widgetUserBox
的解决方案。
library(shiny)
library(shinydashboard)
library(shinydashboardPlus)
ui = dashboardPagePlus(
header = dashboardHeaderPlus(),sidebar = dashboardSidebar(
sidebarMenu(
menuItem("Tab 1",tabName = "Tab_1"))),body = dashboardBody(
tabItems(
tabItem(tabName = "Tab_1",fluidRow(
column(4,textOutput("countText"),br(),actionButton('push','Push Me'),uiOutput("my_box")
))
))
))
server = function(input,output,session) {
counter <- reactiveValues(value = 1)
my_url <- reactiveVal()
output$countText <- renderText({ paste0(counter$value) })
output$my_box <- renderUI({
widgetUserBox(
title = "Can pass text to title",subtitle = "and to subtitle",type = 2,width = 12,background = T,backgroundUrl = my_url(),closable = F,collapsible = F,"and to footer")
})
observeEvent(input$push,{
# Add to count
counter$value <- counter$value + 1
# Arbitrary condition to evaluate which text to output (if counter value is odd,display 1st image,if even then the second)
if ((counter$value %% 2) == 0) {
my_url("https://i.ibb.co/7CVQ1Vk/Carlton-Blues-Banner4.png")
} else {
my_url("https://i.ibb.co/3C8dc71/Brisbane-Lions-Banner.png")
}
})
}
shinyApp(ui = ui,server = server)
编辑
我实际上不确定是否可以使用您所使用的模式找到解决方案。如果您查看widgetUserBox
的源代码,将以下列方式使用backgroundUrl
:
backgroundStyle <- paste0("background: url('",backgroundUrl,"') center center;")
,稍后将其用于生成div
标记。但是,textOutput
将文本包装在span
或div
标记中(请参见container
参数),因此它不再是纯文本。