目标

点击一个按钮切换到一个特定的标签在shiny .

工作示例

这是可行的:

library(bslib)
library(shiny)

ui <- bslib::page_navbar(
  title = "App Title",
  id = "titlePage",
  
  navset_tab(
    id = "tabs",
    nav_panel(
      "one",
      textInput(
        'tabOneText',
        label = "You're on tab 1"
      ),
      actionButton(
        inputId = "ac",
        "Select your tab"
      ),
      verbatimTextOutput("boo")
    ),
    nav_panel(
      "two",
      textInput(
        "tabTwoText",
        label = "You're on tab 2"
      )
    )
  )
)

server <- function(input, output, session){
  observeEvent(input$ac,{

    if (input$ac>0){
    nav_select(
      "tabs",
      selected = "two"
    )
    }
  })
  
  output$boo <- renderPrint({
    input$ac
  })
}

shinyApp(ui, server)

不使用模块

当我使用模块时,面板switch 不工作:

library(bslib)
library(shiny)



my_module_ui <- function(id){
  ns <- NS(id)
  tagList(
    actionButton(
      inputId = ns("ac"),
      "Select your tab"
    ),
    verbatimTextOutput(ns("boo"))
  )
}



my_module_server <- function(id){
  moduleServer(id, function(input, output, session) {
    observeEvent(input$ac,{
      
      if (input$ac>0){
        nav_select(
          "tabs",
          selected = "two"
        )
      }
    })
    
    output$boo <- renderPrint({
      input$ac
    })
  }
  )
  
}



ui <- bslib::page_navbar(
  title = "App Title",
  id = "titlePage",
  
  navset_tab(
    id = "tabs",
    nav_panel(
      "one",
      textInput(
        'tabOneText',
        label = "You're on tab 1"
      ),
      my_module_ui("btn")
    ),
    nav_panel(
      "two",
      textInput(
        "tabTwoText",
        label = "You're on tab 2"
      )
    )
  )
)

server <- function(input, output, session){
  my_module_server("btn")
}

shinyApp(ui, server)

如何告知系统切换到选中页签?

推荐答案

警告-我只是在阅读模块,所以我现在还不能完全理解它们.然而,我做了一些调查,我想我知道问题是什么.

my_module_server中,您需要与input$acinput$tabs这两个输入进行交互.在my_module_ui中,您已经正确地添加了input$acoutput$boo的命名空间,但无法添加input$tabs的命名空间.

因此,当运行my_module_server(...)时,moduleServer函数识别input$acouptut$boo并相应地更新,但它不会"看到"input$tabs.因为我相信它应该是input$`btn-tabs` .其中"btn"是您正在使用的ID.

我目前的建议是重新配置my_module_ui,这样就可以包含navset_tab并为其添加一个名称空间.

或者,一种快速的解决办法是在当前的用户界面中对命名空间进行硬编码.

navset_tab(
  id = NS("btn","tabs"), # hard coded to "btn"
  ...
)

R相关问答推荐

使用%in%时如何应用多个条件?

使用split.zoo界定xts物体的降水事件

rvest函数read_html_live()不允许html_elements()正确读取

使用列表列作为case_when LHS的输入

R:如何自动化变量创建过程,其中我需要基于ifelse()为现有变量的每个级别创建一个单独的变量

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

如何对数据集进行逆向工程?

R Highcharts与两个位置关联的注释

如何计算前一行的值,直到达到标准?

将数据集中的值增加到当前包含的最大值

即使硬币没有被抛出,也要保持对其的跟踪

在数组索引上复制矩阵时出错

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

根据1个变量绘制 colored颜色 发散的 map ,由另一个变量绘制饱和度,ggplot2不工作

如何在R中通过多个变量创建交叉表?

在列表中排列R数据框中的列顺序

将全局环境变量的名称分配给列表中的所有元素

如何对r中包含特定(未知)文本的行求和?

远离理论值的伽马密度曲线下面积的近似

如何使用grepl()在数据帧列表中 Select 特定字符串?