我无法设法让主面板中的 Shiny 服务器一起渲染 html 文本和图标,除非我也独立于服务器在 UI 中渲染图标。这是一个最小的例子:
library(shiny)
ui <- fluidPage(
titlePanel("Icon test app"),
sidebarLayout(
sidebarPanel(
),
mainPanel(
htmlOutput("restart"),
h3("Refresh icon from ui()",icon("refresh"))
)
)
)
server <- function(input, output) {
observe({ output$restart = renderText(
paste0("<h3>",
"Refresh icon from server()",
icon("refresh"),
"</h3>"
)
)
})
}
shinyApp(ui = ui, server = server)
现在是相同的示例,没有由 ui 渲染的文本和图标,它显示了服务器单独渲染的文本,即没有图标:
library(shiny)
ui <- fluidPage(
titlePanel("Icon test app"),
sidebarLayout(
sidebarPanel(
),
mainPanel(
htmlOutput("restart"),
# h3("Refresh icon from ui()",icon("refresh"))
)
)
)
server <- function(input, output) {
observe({ output$restart = renderText(
paste0("<h3>",
"Refresh icon from server()",
icon("refresh"),
"</h3>"
)
)
})
}
shinyApp(ui = ui, server = server)
感谢帮助,谢谢!
icon()
的代码在 ui 函数内运行时会向渲染层添加 html 依赖项。如果您只是在服务器中使用 icon()
函数,则依赖项不会添加到 html 中。您可以通过手动将依赖项注入到 UI 中来解决此问题。将 fontawesome::fa_html_dependency()
添加到您的 UI 布局中。例如,这应该有效:
ui <- fluidPage(
fontawesome::fa_html_dependency(),
titlePanel("Icon test app"),
sidebarLayout(
sidebarPanel(
),
mainPanel(
htmlOutput("restart")
)
)
)
一种方法是:
icon("refresh", lib = "glyphicon")
Boostrap 默认加载
glyphicon
,与 fontawesome
相反。
在将
paste
转换为 HTML
的 character
内,fontawesome
不会自动加载。这就是为什么它在您的第一个示例中工作,其中还有一个 HTML
图标加载所需的库。