想法
我在闪亮的应用中有一个box()
。 box()
包含title
参数(其中包含icon
)和selectInput()
元素。关于icon
上方的胡佛我想要一个工具提示(使用tipify()
)或一个弹出窗口(使用popify()
)title
或content
参数(或两者) )将根据selectInput()
输入生成。
问题
tipify()
和popify()
都没有正确地将textOutput()
作为title
或content
参数实施。他们需要一个字符串,所以我尝试使用reactiveValues()
元素作为函数参数,但它也失败了。
问题
只需使用r
,工具提示或弹出式内容是否可以动态化?怎么可以这样做?
我怀疑可以使用JavaScript
完成,但我对此知之甚少。
代码
尝试1 - 失败 - 显示代码而非实际文本
library("shiny")
library("shinydashboard")
library("shinyBS")
ui <- fluidPage(
box(
title = span("My box",
tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = textOutput("TIP"))),
selectInput(
inputId = "SELECT",
label = NULL,
choices = c("Option1" = "Option1",
"Option2" = "Option2"
),
multiple = FALSE
)
)
)
server <- function(input, output, session){
output$TIP <- renderText({"Helo world!"})
}
shinyApp(ui, server)
尝试2 - 失败 - 无法创建用户界面,因为尚未定义提示(reactiveValues()
)
library("shiny")
library("shinydashboard")
library("shinyBS")
ui <- fluidPage(
box(
title = span("My box",
tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = TIP$a)),
selectInput(
inputId = "SELECT",
label = NULL,
choices = c("Option1" = "Option1",
"Option2" = "Option2"
),
multiple = FALSE
)
)
)
server <- function(input, output, session){
TIP <- reactiveValues(a = "Hello world!")
}
shinyApp(ui, server)
Here是一个类似的问题,但它没有解决此处描述的问题。
答案 0 :(得分:2)
可以做的是完全在服务器端创建标题。这样你就没有问题让它变得动态。这可以给你这种应用程序:
library("shiny")
library("shinydashboard")
library("shinyBS")
ui <- fluidPage(
box(
title = uiOutput("title"),
selectInput(
inputId = "SELECT",
label = NULL,
choices = c("Option1" = "Option1",
"Option2" = "Option2"
),
multiple = FALSE
)
)
)
server <- function(input, output, session){
TIP <- reactiveValues()
observe({
TIP$a <- ifelse(input$SELECT =="Option1","Hello World","Hello Mars")
})
output$title <- renderUI({span("My box",
tipify(el = icon(name = "info-circle", lib = "font-awesome"), title = TIP$a))})
}
shinyApp(ui, server)
希望它有所帮助。