微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么图标没有显示在 Shiny 应用程序的 DT::datatable 中?

如何解决为什么图标没有显示在 Shiny 应用程序的 DT::datatable 中?

我在 Shiny 应用程序的 DT::datatable 列中显示带有迷你图的图标时遇到了一些问题,即使我已经转义了 HTML。

编辑:删除了第二个问题。

library(shiny)
library(dplyr)

ui <- fluidPage(

  htmlwidgets::getDependency('sparkline'),DT::dataTableOutput("table")

)

server <- function(input,output) {

    raw_data <- data.frame(date = 2000:2021,value = sample(100:500,22),icon = as.character(icon("arrow-up")))

  data <- raw_data %>%
    group_by(icon) %>%
    # Create the sparkline
    summarise("value" = sparkline::spk_chr(c(value),xvalues = date,tooltipformat = '{{x}}: {{y}}'))

  output$table <- DT::renderDataTable({

    cb <- htmlwidgets::JS('function(){debugger;HTMLWidgets.staticRender();}')

    DT::datatable(data = data,escape = FALSE,options = list(drawCallback = cb))
  })

}

shinyApp(ui,server)

解决方法

默认情况下,shiny::icon 函数:

  1. 生成图标对应的HTML代码;

  2. 生成一个包含font-awesome图标库的脚本标签。

当您执行 as.character(icon(...... 时,您只能获得 HTML 代码。 font-awesome 库未加载,这就是图标不显示的原因。

获取图标的最简单方法是使用 glyphicon 图标库,该库包含在 bootstrap 中,因此无需加载任何内容(因为 bootstrap strong> 加载到 Shiny 应用程序中):

as.character(icon("arrow-up",lib = "glyphicon"))

如果你真的想要一个字体很棒的图标,有两种可能:

  • 包含带有 link 标签的 font-awesome 库;

  • 或者在应用的其他地方使用 icon 函数,不使用 as.character(如果您不想看到这个图标,可以使用 display:none CSS 属性隐藏它).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。