禁用/启用闪亮的仪表板侧栏上的单击

Roh*_*uja 5 javascript r shiny

有没有一种方法可以禁用/启用对仪表板侧栏的单击,以防止用户导航到其他具有光泽的视图?

我遇到了此解决方案“ 从服务器端禁用/启用侧边栏 ”,但是它所做的只是折叠/取消折叠侧边栏。

但是我正在寻找一种解决方案,通过它可以启用/禁用对它的单击,以更好地控制何时允许用户访问以导航到其他视图。

一个用例是:如果我希望用户先导航第一页上的所有输入,然后他/她就可以导航到其他部分。

SBi*_*sta 8

您可以将shinyjspackage和一些custom一起使用css。这是一个最小的示例:

library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    useShinyjs(),
    sidebarMenu(id = "sidebar",
      tags$head(tags$style(".inactiveLink {
                            pointer-events: none;
                           cursor: default;
                           }")),
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
     menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )

  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              actionButton("Disable", "Disable Widgets"),
              actionButton("Enable", "Enable Widgets")
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
    )
  )



server <- function(input, output){


  observeEvent(input$Disable, {
     addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  })
  observeEvent(input$Enable, {
    removeCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")
  })

}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

通过单击按钮“启用(启用小部件)”和“禁用(禁用小部件)”,您可以启用和禁用菜单项小部件。

编辑:

为确保menuItems禁用应用程序加载时,您只需addCssClass在服务器中添加该功能,以便在应用程序加载时执行该功能。

因此,代码将如下所示:

library(shinydashboard)
library(shinyjs)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    useShinyjs(),
    sidebarMenu(id = "sidebar",
      tags$head(tags$style(".inactiveLink {
                            pointer-events: none;
                           cursor: default;
                           }")),
     menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
     menuItem("Widgets", tabName = "widgets", icon = icon("th"))
    )

  ),
  dashboardBody(
    tabItems(
      # First tab content
      tabItem(tabName = "dashboard",
              actionButton("Disable", "Disable Widgets"),
              actionButton("Enable", "Enable Widgets")
      ),

      # Second tab content
      tabItem(tabName = "widgets",
              h2("Widgets tab content")
      )
    )
    )
  )



server <- function(input, output){

  #Disable menuitem when the app loads
  addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  observeEvent(input$Disable, {
     addCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")

  })
  observeEvent(input$Enable, {
    removeCssClass(selector = "a[data-value='widgets']", class = "inactiveLink")
  })

}
shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!