首页 > 解决方案 > 根据选定的值更新 url

问题描述

我正在尝试根据下拉列表中的选择来解析 url。现在,当我们127.0.0.1:XXXX/?selected_facility=4在 url 中时,它工作正常。

但是我们可以在这里做一个小改动吗?每当用户更改下拉列表时,url 本身应该被更改为相应的一次

例如,当用户选择 4 时,url 应变为127.0.0.1:XXXX/?selected_facility=4 类似,5 时,url 应变为127.0.0.1:XXXX/?selected_facility=5

现在,网址没有改变

library(shiny)

facilities <- seq(1:5)

ui <- fluidPage(
    
    selectInput("selected_facility", "Select facility", choices = facilities)
    
)

server <- function(input, output, session) {
    
    observe({
       
        #Get URL query
        query <- parseQueryString(session$clientData$url_search)
        
        #Ignore if the URL query is null
        if (!is.null(query[['selected_facility']])) {

            #Update the select input
            updateSelectInput(session, "selected_facility", selected  = query[['selected_facility']], choices = facilities)
            
        }
        
    })
    
}

shinyApp(ui, server)

标签: rshiny

解决方案


这可以通过以下方式完成updateQueryString

library(shiny)

facilities <- seq(1:5)

ui <- fluidPage(
  selectInput("selected_facility", "Select facility", choices = facilities)
)

server <- function(input, output, session) {
  
  observe({
    #Get URL query
    query <- parseQueryString(session$clientData$url_search)
    #Ignore if the URL query is null
    if (!is.null(query[['selected_facility']])) {
      #Update the select input
      updateSelectInput(session, "selected_facility", selected  = query[['selected_facility']], choices = facilities)
    }
  })
  
  observeEvent(input$selected_facility, {
    updateQueryString(
      queryString = sprintf("?selected_facility=%s", input$selected_facility),
      mode = c("replace")
    )
  })
  
}

shinyApp(ui, server)

推荐阅读