6

我需要从tabsetR Markdown 文档中选择一个选项卡(使用 Shiny 运行时)。

我按照How to select a specific tabPanel in Shiny中的示例进行操作,并尝试使其适应 R Markdown。我将ids 添加到 tabset / tab,并在updateTabsetPanel()调用中使用它们,但它似乎不起作用。(我使用了在结果仪表板中检查单个 HTML 元素时弹出的名称。)

如何tabset通过单击按钮从 中选择“Chart3”选项卡?

编辑:我需要能够以编程方式(例如通过observeEvent()调用)选择特定选项卡,而不仅仅是在启动时。

---
title: "Tabset Column"
output: flexdashboard::flex_dashboard
runtime: shiny
---
    
Column 
-------------------------------------
    
### Chart 1
    
```{r}
actionButton("switch_tab", "Switch tab", width=200)
```
   
Column {#mytabset .tabset}
-------------------------------------
   
### Chart 2

```{r}
```   
 
### Chart 3 {#mytab}
    
```{r}
observeEvent(input$switch_tab, {
    updateTabsetPanel(session, inputId = "section-mytabset", selected = "#section-mytab")
})
```
4

2 回答 2

4

{.active}属性可以在启动仪表板(静态解决方案)时回答您的问题,并适用于html_document

---
title: "Active Tabset"
output: html_document
---
    

Column {.tabset}
-------------------------------------
   
### Tab 1

Some text
 
### Tab 2 {.active}

Some other text

在此处输入图像描述

不幸的是,这不适用于Flexdashboard

---
title: "Active Tabset"
output: flexdashboard::flex_dashboard
---
    

Column {.tabset}
-------------------------------------
   
### Tab 1

Some text
 
### Tab 2 {.active}

Some other text

在此处输入图像描述

该问题已在此处发出信号,但由于自动锁定而被关闭。
为了遵守RMarkdown 问题指南的等待期已经结束,我用上面的最小可重现示例提交了一个新问题。

编辑:此请求已被考虑在内,因此这应该很快与 Shiny Dashboard 一起使用。

于 2021-02-17T22:18:18.343 回答
3

您可以将自身observeEvent包装在an中并链接到. 请注意,使用时必须在选项卡名称之前添加.actionButtontags$a#section-mytabsection-runtime: shiny

这能解决您的问题还是您需要它来解决问题observeEvent

---
title: "Tabset Column"
output: flexdashboard::flex_dashboard
runtime: shiny
---

Column 
-------------------------------------
  
### Chart 1
  
```{r, echo = FALSE}
tags$a(href = "#section-mytab",
  shiny::actionButton("btn1", "go to mytab")
       )
```

Column {.tabset}
-------------------------------------
    
### Chart 2

```{r}

```   
  
### Chart 3 {#mytab}
  
```{r}

```

如果需要,可以将上面的逻辑与observeEvent使用 {shinyjs} 和 non-visible结合使用actionButton。诀窍就在这里,我们仍然使用 anactionButton来触发选项卡。但是没有显示实际的按钮display: none(重要的是,按钮没有设置为hidden,因为这会阻止它被点击)。然后我们创建另一个actionButton由 观察observeEvent。这可以触发其他计算等,最后clickactionButton未显示的。如果您有更多页面并且想要从页面 1 跳转到页面 2 上的选项卡 3,那么我们将需要两个clicks:一个更改页面,一个激活选项卡。但是我们都可以在内部触发observeEvent. 它很老套,看起来不像是好的代码,但从好的方面来说,它可以工作,即使没有自定义的 javascript 函数。

---
title: "Tabset Column"
output: 
flexdashboard::flex_dashboard
runtime: shiny
---

```{r global, echo = FALSE}
library(shiny)
library(shinyjs)
useShinyjs(rmd = TRUE)
```


Column 
-------------------------------------
  
### Chart 1

```{r, echo = FALSE}
observeEvent(input$btn1, {
  # do some calculations here
  click("btn2")})
 
shiny::actionButton("btn1", "do something")

tags$a(href = "#section-mytab",
  # set this button to `display: none;` but *not* to `hidden`
  shiny::actionButton("btn2", "go to mytab", style = "display: none")
  )
```

Column {.tabset}
-------------------------------------

### Chart 2

```{r}

```   
  
### Chart 3 {#mytab}
  
```{r}

```
于 2021-02-22T21:25:04.300 回答