r - 为什么图标不显示在 Shiny 应用程序的 DT::datatable 中?
问题描述
DT::datatable
即使我已经转义了 HTML,我在 Shiny 应用程序的列中显示带有迷你图的图标时遇到了一些问题。
编辑:删除了第二个问题。
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
函数:
生成图标对应的HTML代码;
生成一个包含font-awesome图标库的脚本标签。
当你这样做时as.character(icon(......
,你只会得到 HTML 代码。font-awesome库未加载,这就是图标不显示的原因。
获取图标的最简单方法是使用glyphicon图标库,该库包含在引导程序中,因此无需加载(因为引导程序已在 Shiny 应用程序中加载):
as.character(icon("arrow-up", lib = "glyphicon"))
如果你真的想要一个字体很棒的图标,有两种可能性:
包含带有标签的font-awesome库;
link
或
icon
在您的应用程序的其他地方使用该功能,而不使用(如果您不想看到此图标,as.character
可以使用 CSS 属性将其隐藏),如下所示。display:none
# add inside ui
tags$span(icon("tag"), style = "display: none;")
推荐阅读
- javascript - 带参数调用 JSF 方法 | JavaScript
- elk - 从合规性获取警报时出错您的环境可能没有任何包含 Wazuh 警报的索引
- python - 当数据集太小而无法训练模型时,应该使用什么方法来标记特定文本?
- .net - .NET 无法加载特定版本的程序集
- python - Python / Weasyprint循环崩溃“退出代码-1073741819(0xC0000005)”
- sql - 如何识别导致 T-SQL Union 中数据类型错误的所有列?
- sql - 如何选择列值 min 到给定值的累积总和的行
- c++ - 外部 VS 代码编译器
- c# - Html.DropDownListFor 选定值未设置为选定值
- javascript - 在 Bootstrap 5 中调用 carousel.to() 时出错