我建议您向输入值添加一个类型,您的conditionalPanels
正在测试,您可以控制。
您当前正在检查输入是否link_click
and link_click_Site
are undefined
。一旦设置完毕,您可以使用以下命令重置它们customMessageHandler
,但当然不是undefined
。我会选择另一个独特的值,例如 JavaScriptnull
.
所以基本上将所有条件更改为未定义或为空或类似地不是未定义且不为空。然后您可以通过将它们设置为来重置输入null
.
参见下面的代码:
library(shiny)
library(leaflet)
library(maps)
ui <- shinyUI(
fluidPage(
tags$script("
Shiny.addCustomMessageHandler('resetInputValue', function(variableName){
Shiny.onInputChange(variableName, null);
});
"),
conditionalPanel(
condition <- "input.link_click === undefined || input.link_click === null",
leafletOutput("Map", width = 1000, height = 500)
),
conditionalPanel(
condition <- "(input.link_click_Site === undefined || input.link_click_Site === null) && (input.link_click !== undefined && input.link_click !== null)",
leafletOutput("CountryMap", width = 1000, height = 500)
),
conditionalPanel(
condition <- "(input.link_click_Site !== undefined && input.link_click_Site !== null)",
h3("Plots related to site chosen"),
textOutput(outputId = "Check"),
actionButton("Back", "Back")
)
)
)
server <- function(input, output, session) {
Country = map("world", fill = TRUE, plot = FALSE, regions="USA")
output$Map <- renderLeaflet({
leaflet(Country) %>% addTiles() %>% setView(0, 0, zoom = 2)%>%
#leaflet(target) %>% addTiles() %>%
addPolygons(fillOpacity = 0.6,
fillColor = 'blue',
smoothFactor = 0.5, stroke = TRUE, weight = 1, popup = paste("<b>", "USA", "</b><br>",
actionLink(inputId = "View",
label = "View Details",
onclick = 'Shiny.onInputChange(\"link_click\", Math.random())')))
})
output$CountryMap <- renderLeaflet({
leaflet(Country) %>% addTiles() %>%
fitBounds(Country$range[1], Country$range[3], Country$range[2], Country$range[4])%>%
addMarkers(lng = -71.03 , lat = 42.37, popup = paste("<b>", "Boston", "</b><br>",
actionLink(inputId = "View",
label = "View Details",
onclick = 'Shiny.onInputChange(\"link_click_Site\", Math.random())')))
})
observeEvent(input$link_click_Site, {
output$Check <- renderText("Success")
})
observeEvent(input$Back, {
session$sendCustomMessage(type = 'resetInputValue', message = "link_click_Site")
session$sendCustomMessage(type = 'resetInputValue', message = "link_click")
})
}
shinyApp(ui, server)