【问题标题】:R shiny: Switching tabs programmatically using shinymaterialR闪亮:使用闪亮材料以编程方式切换标签
【发布时间】:2021-01-18 07:38:10
【问题描述】:

我正在使用shinymaterial R package 制作shiny 应用程序,并希望能够以编程方式交换标签。来自this pull request 我做了以下reprex,但我无法使功能正常工作。

如何调整以下示例以使用 shinymaterial 以编程方式更改选项卡?

library(shinymaterial)
library(shiny)

select_material_tab <- function(session, tab_id){
  
  js_code <- paste0('$(\'li.tab a[href$="#', tab_id, '"]:first\').trigger("click");')
  
  session$sendCustomMessage(
    type = "shinymaterialJS",
    js_code
  )

}


ui <- material_page(
  title = "Select Material Tabs",
  material_side_nav(fixed = FALSE, tags$h3("Side-Nav Content")),
  material_tabs(
    tabs = c( "First Tab" = "first_tab", "Second Tab" = "second_tab")
  ),
  material_tab_content(
    tab_id = "first_tab", 
    material_button(input_id = "button", label = "GO TO SECOND TAB")
  ),
  material_tab_content(
    tab_id = "second_tab", 
    tags$h1("Second Tab Content")
  )
)

server <- function(input, output, session) {
  observe({
    if (input$button != 0) 
      select_material_tab(session, "second_tab")
  })
}

shinyApp(ui = ui, server = server)

【问题讨论】:

  • 您好,我回答了您之前关于闪亮材料的一个问题,但您没有提供任何反馈。提供更多帮助没有动力。
  • 嗨@StéphaneLaurent,感谢您查看此内容。据我所知,我之前只问过一个闪亮的问题,我接受并感谢你的回答。我错过了什么吗?
  • 糟糕...那么我很抱歉。我和别人混淆了!
  • 别担心,我们都只是名字和头像 :)

标签: javascript r shiny shinyapps


【解决方案1】:
library(shiny)
library(shinymaterial)

js <- "
$(document).on('shiny:connected', function() {
  Shiny.addCustomMessageHandler('selectTab', function(tab) {
    var tabs = document.querySelector('ul.tabs');
    var instance = M.Tabs.getInstance(tabs);
    instance.select(tab);
  });
});
"

ui <- material_page(

  tags$head(tags$script(HTML(js))),
  
  title = NULL,
  
  # Define tabs
  material_tabs(
    tabs = c(
      "First Tab" = "first_tab",
      "Second Tab" = "second_tab",
      "Third Tab" = "third_tab"
    )
  ),
  # Define tab content
  material_tab_content(
    tab_id = "first_tab",
    tags$h1("First Tab Content"),
    material_button("btn1", "Go to tab 2")
  ),
  material_tab_content(
    tab_id = "second_tab",
    tags$h1("Second Tab Content"),
    material_button("btn2", "Go to tab 3")
  ),
  material_tab_content(
    tab_id = "third_tab",
    tags$h1("Third Tab Content"),
    material_button("btn3", "Go to tab 1")
  )
)

server <- function(input, output, session) {
  
  observeEvent(input[["btn1"]], {
    session$sendCustomMessage("selectTab", "second_tab")
  }, ignoreInit = TRUE)  

  observeEvent(input[["btn2"]], {
    session$sendCustomMessage("selectTab", "third_tab")
  }, ignoreInit = TRUE)  

  observeEvent(input[["btn3"]], {
    session$sendCustomMessage("selectTab", "first_tab")
  }, ignoreInit = TRUE)  
  
}

shinyApp(ui = ui, server = server)

【讨论】:

  • 嗨斯蒂芬妮,非常感谢!我现在不在,但我会在今天晚些时候确认我什么时候可以让它工作。
  • 这很好用!非常感谢!我在原始 pull request 上引用了这个答案作为一个很好的解决方案。再次感谢 Stéphane
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
相关资源
最近更新 更多