使用 R Shiny 中的 ActionButton 跳转到选项卡项目

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

我正在使用

bs4Dash
包构建一个应用程序,我想在主页中包含操作按钮,以允许用户跳转到适当的页面。然而,这些按钮没有任何作用。

这与这个问题非常相似。我相信这里的问题是

updatebs4TabItems
需要 TabSetPanel inputId...除了我不希望在此处包含选项卡集面板。

library(shiny)
library(bs4Dash)

ui <- bs4DashPage(
  # Sidebar -------------------------------------------------------------
  sidebar = bs4DashSidebar(
    bs4SidebarMenu(
      bs4SidebarMenuItem(
        "Welcome",
        tabName = "item0"
      ),
      bs4SidebarMenuItem(
        "Page 1",
        tabName = "item1"
      ),
      bs4SidebarMenuItem(
        "Page 2",
        tabName = "item2"
      )
    )
  ),
  # Body -------------------------------------------------------------
  body = bs4DashBody(
    bs4TabItems(
      bs4TabItem(
        tabName = "item0",
        fluidRow(
          actionButton("JumpToV1", "Go to Page 1"),
          actionButton("JumpToV2", "Go to Page 2")
        )
      ),
      bs4TabItem(
        tabName = "item1",
        fluidRow(
          bs4Callout(
            title = "This is Page 1",
            elevation = 4,
            status = "danger"
          )
        )
      ),
      bs4TabItem(
        tabName = "item2",
        fluidRow(
          bs4Callout(
            title = "This is Page 2",
            elevation = 4,
            status = "danger")
        )
      )
    )
  )
)

server <- function(input, output, session) {
  observeEvent(input$JumpToV1, {
    updatebs4TabItems(session, "item0", selected = "item1")
  })

  observeEvent(input$JumpToV2, {
    updatebs4TabItems(session, "item0", selected = "item2")
  })
}

shinyApp(ui, server)
r shiny bs4dash
2个回答
2
投票

你很接近了!有两件事需要调整。从文档中,请注意 updatebs4TabItems 中的选定参数采用整数(选定选项卡的位置),而不是字符串(因此不是您拥有的 id 名称)。另外, updatebs4TabItems 的 inputID 参数将引用您需要设置的 sidebarID 。下面的代码应该按照你想要的方式工作。

library(shiny)
library(bs4Dash)

ui <- bs4DashPage(
    # Sidebar -------------------------------------------------------------
    sidebar = bs4DashSidebar(
        bs4SidebarMenu(
            id = "sidebarID", #note the new ID here
            bs4SidebarMenuItem(
                "Welcome",
                tabName = "item0"
            ),
            bs4SidebarMenuItem(
                "Page 1",
                tabName = "item1"
            ),
            bs4SidebarMenuItem(
                "Page 2",
                tabName = "item2"
            )
        )
    ),
    # Body -------------------------------------------------------------
    body = bs4DashBody(
        bs4TabItems(
            bs4TabItem(
                tabName = "item0",
                fluidRow(
                    actionButton("JumpToV1", "Go to Page 1"),
                    actionButton("JumpToV2", "Go to Page 2")
                )
            ),
            bs4TabItem(
                tabName = "item1",
                fluidRow(
                    bs4Callout(
                        title = "This is Page 1",
                        elevation = 4,
                        status = "danger"
                    )
                )
            ),
            bs4TabItem(
                tabName = "item2",
                fluidRow(
                    bs4Callout(
                        title = "This is Page 2",
                        elevation = 4,
                        status = "danger")
                )
            )
        )
    )
)

server <- function(input, output, session) {
    observeEvent(input$JumpToV1, {
    #changed ID and selected here and below
        updatebs4TabItems(session, inputId = "sidebarID", selected = 2)
    })

    observeEvent(input$JumpToV2, {
        updatebs4TabItems(session, inputId = "sidebarID", selected = 3)
    })
}

shinyApp(ui, server)

0
投票

自 2025 年 1 月起,updatebs4TabItems 中选定的参数现在需要选项卡的 ID,而不是列表中的数字位置。

© www.soinside.com 2019 - 2024. All rights reserved.