如何确定用户是否正在查看 flexdashboard 中的特定页面?我有一个全局侧边栏过滤器面板,适用于所有页面,但侧边栏中的过滤器之一不适用于其中一个页面。在此示例中,假设我不希望在第 3 页上显示 selectInput()
。
---
title: "Which Page?"
runtime: shiny
output: flexdashboard::flex_dashboard
---
Sidebar {.sidebar data-width=400}
=====================================
```{r}
textInput("text", NULL)
selectInput("select", NULL, LETTERS[1:5])
```
Page 1
=====================================
Page 2
=====================================
Page 3
=====================================
我希望使用 session$clientData$url_hash
但这是静态的并且基于用户最初打开的页面。你可以把它放在侧边栏部分,看看它是如何(不)改变的。我发现的其他想法是在 js 中使用 window.location
或 is.visible
但不确定如何集成。
print_info <- function(x) {
allvalues <-
lapply(
X = sort(names(x)),
FUN = function(name) {
item <- x[[name]]
paste(name, item, sep = " = ")
}
)
paste(allvalues, collapse = "\n")
}
output$client_data <- renderText(print_info(session$clientData))
verbatimTextOutput("client_data")
答案 0 :(得分:0)
您可以利用 renderXXX()
仅在活动页面上计算这一事实。例如,我们可以在每个页面上使用 renderUI()
来更新具有当前页码的反应值 tab
。然后在侧栏中使用该值来检查 selectInput
是否与 renderUI
一起显示:
---
title: "Which Page?"
runtime: shiny
output: flexdashboard::flex_dashboard
---
Sidebar {.sidebar data-width=400}
=====================================
```{r}
textInput("text", NULL)
tab <- reactiveVal(1)
renderUI({
if(tab()!=3)
selectInput("select", NULL, LETTERS[1:5])
})
```
Page 1
=====================================
```{r}
renderUI({tab();tab(1);NULL})
```
Page 2
=====================================
```{r}
renderUI({tab();tab(2);NULL})
```
Page 3
=====================================
```{r}
renderUI({tab();tab(3);NULL})
```
您也可以使用 JS 事件
(注意使用 is.null()
作为事件不会在第 1 页初始显示时触发):
---
title: "Which Page?"
runtime: shiny
output: flexdashboard::flex_dashboard
---
<script>
$("body").on("shown.bs.tab", "a[data-toggle='tab']", function(e) {
Shiny.setInputValue("active_tab", $(e.target).parent().index() + 1);
})
</script>
Sidebar {.sidebar data-width=400}
=====================================
```{r}
textInput("text", NULL)
renderUI({
if(is.null(input$active_tab) || input$active_tab!=3)
selectInput("select", NULL, LETTERS[1:5])
})
```
Page 1
=====================================
Page 2
=====================================
Page 3
=====================================