Ссылаясь на input$zoomTo
в операторе renderLeaflet
, Shiny повторно запускает эту функцию, если нажать кнопку. Чтобы это работало, мне нужно было присвоить кнопке id
и правильную class
.
Я не уверен, почему вы используете HTML и JavaScript, чтобы делать все это вместо использования виджетов, предоставленных Shiny. Взгляните на Shiny Widget Gallery , чтобы увидеть, что возможно, используя только функциональность R.
library(shiny)
library(leaflet)
ui <- fluidPage(leafletOutput("mymap"),
tags$div(
HTML(
'
Latitude: <input type="text" name="lat" id="lat"/>
Longitude: <input type="text" name="lng" id="lng"/>
<input id="zoomTo" type="button" value="zoomTo" class="action-button"/>
'
)
))
server <- function(input, output, session) {
output$mymap <- renderLeaflet({
input$zoomTo
leaflet() %>%
addProviderTiles(providers$Stamen.TonerLite,
options = providerTileOptions(noWrap = TRUE)) %>%
setView(15, 47, 12) %>%
htmlwidgets::onRender(
'function(el, x) {
var lat = document.getElementById("lat").value;
var lng = document.getElementById("lng").value;
this.panTo(new L.LatLng(lat, lng));
}'
)
})
}
shinyApp(ui, server)