在 Shiny 中一起渲染来自服务器的图标和文本

问题描述 投票:0回答:2

我无法设法让主面板中的 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)

感谢帮助,谢谢!

r shiny font-awesome
2个回答
1
投票

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")
    )
  )
)

0
投票

一种方法是:

icon("refresh", lib = "glyphicon")

Boostrap 默认加载

glyphicon
,与
fontawesome
相反。

在将

paste
转换为
HTML
character
内,
fontawesome
不会自动加载。这就是为什么它在您的第一个示例中工作,其中还有一个
HTML
图标加载所需的库。

© www.soinside.com 2019 - 2024. All rights reserved.