R Shiny中点击valueBox链接触发selectInput更新的问题
问题根因
你代码的核心问题出在updateSelectInput的selected参数赋值不匹配:你定义的choices结构是c(显示名 = 实际值),即显示名是pdf1/pdf2,组件实际返回的选中值是PDF的存储路径,你在更新时给selected传了显示名pdf1,而不是对应的实际路径,所以更新失效。
除此之外,原有简化代码还漏写了dashboardPage必填的头部、侧边栏参数,也会导致运行报错。
修正后可运行完整代码
# 先加载必要依赖包 library(shiny) library(shinydashboard) library(shinyjs) shinyServer(function(input, output, session){ observeEvent(input$link1, { # selected参数传对应PDF的实际路径,选项目录不变无需重复传choices updateSelectInput(session, inputId = "pdf_selection", selected = "location/pdf1.pdf") # 如果你需要跨标签页跳转,放开下方注释,替换为你自己的菜单ID、标签页ID即可 # updateTabItems(session, "your_menu_id", selected = "your_pdf_tab_id") }) observeEvent(input$link2, { updateSelectInput(session, inputId = "pdf_selection", selected = "location/pdf2.pdf") # 同上可加跳转逻辑 }) output$pdfView <- renderUI({ req(input$pdf_selection) # 加req避免初始无值时报错 tags$iframe(style = "height:800px;width:100%", src = input$pdf_selection) }) output$stat1 <- renderValueBox({ valueBox(subtitle = "fact 1", value = actionLink(inputId = "link1", label = HTML("Some statistic to report1"))) }) output$stat2 <- renderValueBox({ valueBox(subtitle = "fact 2", value = actionLink(inputId = "link2", label = HTML("Some statistic to report2"))) }) }) shinyUI(fluidPage( dashboardPage( dashboardHeader(), # 补全必填的头部参数 dashboardSidebar(), # 补全必填的侧边栏参数 dashboardBody( useShinyjs(), fluidRow(valueBoxOutput("stat1"), valueBoxOutput("stat2")), selectInput(inputId = "pdf_selection", label = "select pdf", choices = c("pdf1" = "location/pdf1.pdf", "pdf2" = "location/pdf2.pdf"), selected = "location/pdf1.pdf"), # 初始值设为第一个PDF路径 htmlOutput("pdfView") ) ) ))
验证注意事项
- 把代码里的
location/pdf1.pdf替换为你实际的PDF存储路径,本地文件需要放在Shiny应用的www目录下才能正常加载 - 点击valueBox内的链接后,selectInput选中项会同步切换,PDF预览也会自动更新
内容的提问来源于stack exchange,提问作者PeterI
相关产品推荐
相关产品推荐

