如何防止bslib在闪亮的应用程序中更改DT格式样式?

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

我正在尝试从 {shinydashboard} 切换到 {bslib} 作为我的 {shiny} 应用程序的 UI 工具包。 但我在使用 {bslib} 呈现 {DT} 表的方式时遇到了一些麻烦。

有没有办法阻止{bslib}改变{DT}表格式样式??

这是一个最小的例子:

  1. 如果没有 {bslib},我的表格将按照我提供的样式呈现:

代码:

library(shiny)
library(dplyr)
library(DT)

ui <- shiny::fluidPage(
    DT::DTOutput("tab1")
)

server <- function(input, output) {
    output$tab1 <- DT::renderDT({
        mtcars %>% 
            head() %>% 
            DT::datatable() %>% 
            DT::formatStyle(
                columns = "mpg", 
                target = "row", 
                color = DT::styleEqual(c(21), "white"),
                backgroundColor = DT::styleEqual(c(21), "#4d4d4d"),
            )
    })
}

shinyApp(ui = ui, server = server)
  1. 使用 {bslib},我提供的样式变得混乱:

代码:

library(shiny)
library(dplyr)
library(DT)
library(bslib)

ui <- bslib::page_sidebar(
    DT::DTOutput("tab1")
)

server <- function(input, output) {
    output$tab1 <- DT::renderDT({
        mtcars %>% 
            head() %>% 
            DT::datatable() %>% 
            DT::formatStyle(
                columns = "mpg", 
                target = "row", 
                color = DT::styleEqual(c(21), "white"),
                backgroundColor = DT::styleEqual(c(21), "#4d4d4d"),
            )
    })
}

shinyApp(ui = ui, server = server)

查看第一行中的字体颜色如何通过 {bslib} 变为黑色。 我怎样才能防止这种情况发生?我想要与没有 {bslib} 时完全相同的表

r shiny dt bslib
1个回答
0
投票

事实证明

DT::datatable()
有一个参数可以控制:
style

根据

style
参数的函数文档:

“自动”、“默认”、“bootstrap”或“bootstrap4”。如果“auto”,并且 bslib 主题当前处于活动状态,则引导样式将以“仅适用于”活动主题的方式使用。否则,将使用 DataTables 的“默认”样式。如果显式设置为“bootstrap”或“bootstrap4”,则必须注意确保页面上包含 Bootstrap 的 HTML 依赖项(以及 Bootswatch 主题,如果需要)。请注意,当显式设置时,如果存在多个 DT 表,则用户有责任确保同一页面上仅使用一个唯一的“样式”值,因为不同的样式资源可能会相互冲突。

因此,为了防止{bslib}更改

DT::datatable()
的主题,只需将
style
DT::datatable()
参数设置为
default
即可。像这样:
DT::datatable(style = "default")

因此,将其应用于我在问题中提供的最小示例:

代码:

library(shiny)
library(dplyr)
library(DT)

ui <- shiny::fluidPage(
    DT::DTOutput("tab1")
)

server <- function(input, output) {
    output$tab1 <- DT::renderDT({
        mtcars %>% 
            head() %>% 
            DT::datatable(style = "default") %>% 
            DT::formatStyle(
                columns = "mpg", 
                target = "row", 
                color = DT::styleEqual(c(21), "white"),
                backgroundColor = DT::styleEqual(c(21), "#4d4d4d"),
            )
    })
}

shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.