将自定义操作按钮添加到闪亮应用程序内传单地图的弹出窗口中

问题描述 投票:0回答:1

我正在尝试在 R闪亮中构建一个应用程序,用户可以在其中了解有关地图上的点的详细信息。当用户单击某个点时,弹出窗口会显示一些初始详细信息,然后显示一个 ActionButton(或 ActionLink)。当用户单击该 ActionButton 时,ObserveEvent 反应式启动一个模式对话框,显示有关该点的更多信息。我已经准备好了地图、操作按钮和模式对话框。但是,我不知道如何将每个 ActionButton“分配”到地图上的点/弹出窗口。有没有办法让每个 ActionButton 从地图上各自的点继承其 ID,然后将该信息传递给启动模态对话框的 ObserveEvent?下面的工作示例:

library(shiny)
library(leaflet)
library(DT)

##Setup##
mapdata <- quakes
mapdata$latitude <- as.numeric(mapdata$lat)
mapdata$longitude <- as.numeric(mapdata$long)

ui <- fluidPage(
    leafletOutput("mymap")
)

server <- function(input, output, session) {

    observeEvent(input$button_click, {
        showModal(modalDialog(
            title = "More Details",
            renderDataTable({
                df <- mapdata[1,]
                x <- as.data.frame(cbind(colnames(df),t(df)),row.names = F);colnames(x) <- c("Field","Value")
                x
            })
        ))
    })

    output$mymap <- renderLeaflet({
        leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
            addMarkers(lat = ~ latitude, lng = ~ longitude,
                       data = mapdata,
                       popup= ~paste("<b>", mag, "</b></br>", actionLink(inputId = "modal", label = "View Details", onclick = 'Shiny.setInputValue(\"button_click\", this.id, {priority: \"event\"})')))
    })
}

###How can I assign an inputID to each action link that matches the id for that action links point?

shinyApp(ui, server)
javascript r shiny r-leaflet action-button
1个回答
1
投票

我在上面留下了评论,但我相信这应该是一个可行的例子。也感谢我在这个问题上苦苦挣扎,这让我找到了答案。

library(shiny)
library(leaflet)
library(DT)

##Setup##
mapdata <- quakes
mapdata$latitude <- as.numeric(mapdata$lat)
mapdata$longitude <- as.numeric(mapdata$long)
mapdata$id <- 1:nrow(mapdata)

ui <- fluidPage(
  leafletOutput("mymap")
)

server <- function(input, output, session) {
  
  observeEvent(input$button_click, {
    
    clicked_point <- reactiveVal(input$mymap_marker_click)
    showModal(modalDialog(
      title = "More Details",
      renderDataTable({
        df <- mapdata[mapdata['id'] == clicked_point()$id,]
        x <- as.data.frame(cbind(colnames(df),t(df)),row.names = F);colnames(x) <- c("Field","Value")
        x
      })
    ))
  })
  
  output$mymap <- renderLeaflet({
    leaflet(options = leafletOptions(maxZoom = 18)) %>% addTiles() %>%
      addMarkers(lat = ~ latitude, lng = ~ longitude,
                 data = mapdata,
                 layerId = mapdata$id,
                 popup= ~paste("<b>", mag, "</b></br>", actionLink(inputId = "modal", label = "View Details", onclick = 'Shiny.setInputValue(\"button_click\", this.id, {priority: \"event\"})')))
  })
}

shinyApp(ui, server)
© www.soinside.com 2019 - 2024. All rights reserved.