r-为什么Shiny应用程序中的DT::数据表中没有显示图标



我在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. 生成一个脚本标记,其中包括字体真棒图标库

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

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

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

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

  • 包含带有link标签的font真棒库;

  • 或者在应用程序的其他地方使用icon函数,而不使用as.character(如果不想看到此图标,可以使用display:noneCSS属性隐藏它),如下所示。

# add inside ui
tags$span(icon("tag"), style = "display: none;")

最新更新