在闪亮的启动上跨标签渲染传单标记

时间:2018-03-27 02:54:51

标签: r shiny leaflet

我尝试在R闪亮的应用中创建两个传单地图,这些应用使用sliderInput()功能放置在不同的tabpanel中。我希望有一个小部件(例如,library(shiny) library(leaflet) pts <- data.frame( x = rnorm(10, mean = -93.625), y = rnorm(10, mean = 42.0285) ) # Define UI ui <- fluidPage( sliderInput("radius", "Point radius:", min = 1, max = 50, value = 30), tabsetPanel( tabPanel('Map1', leafletOutput('map1') ), tabPanel('Map2', leafletOutput('map2') ) ) ) # Define server logic required to draw a histogram server <- function(input, output) { output$map1 <- renderLeaflet({ leaflet() %>% addTiles() %>% setView(-93.65, 42.0285, zoom = 6) }) output$map2 <- renderLeaflet({ leaflet() %>% addTiles() %>% setView(-93.65, 42.0285, zoom = 6) }) observe({ tab1 <- leafletProxy('map1', data = pts) %>% clearMarkers() %>% addCircleMarkers(lng = ~x, lat = ~y, radius = input$radius) tab2 <- leafletProxy('map2', data = pts) %>% clearMarkers() %>% addCircleMarkers(lng = ~x, lat = ~y, radius = input$radius) }) } # Run the application shinyApp(ui = ui, server = server) )来控制两个地图上标记的大小。我可以创建一个执行此操作的应用程序,但问题是功能最初不会在启动时在第二个面板上的地图上呈现。仅在选择面板后,才会在第二个面板上呈现要素,然后使用滑块更改输入。我希望这两个地图在启动时显示它们的功能,而不必使用滑块初始化第二个。

<script src="https://use.fontawesome.com/releases/v5.0.6/js/all.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.6.2/css/bulma.min.css" rel="stylesheet"/>
<nav id="login" class="panel">
    <p class="panel-heading">Login</p>
    <div class="panel-block">
        <form name="LoginForm" action="/login/" method="post">
            <div class="field is-fullwidth">
                <div class="control is-expanded has-icons-left has-icons-right">
                    <input class="input is-fullwidth" type="email" placeholder="Email">
                    <span class="icon is-small is-left">
                        <i class="fas fa-envelope"></i>
                    </span>
                    <span class="icon is-small is-right">
                        <i class="fas fa-check"></i>
                    </span>
                </div>
            </div>
            <div class="field">
                <div class="control has-icons-left">
                    <input class="input" type="password" placeholder="Password">
                    <span class="icon is-small is-left">
                        <i class="fas fa-lock"></i>
                    </span>
                </div>
            </div>
            <div class="field">
                <div class="control">
                    <label class="checkbox">
                        <input type="checkbox">Remember me</a>
                    </label>
                </div>
            </div>
            <div class="field is-grouped is-grouped-right">
                <p class="control">
                    <button class="button is-success">Login</button>
                </p>
            </div>
            <div class="field">
                <div class="control">
                    <a href="/register/">I haven't account yet</a>
                </div>
            </div>
             <div class="field">
                <div class="control">
                    <a href="/reset-password/">I forgot password</a>
                </div>
            </div>
        </form>
    </div>
</nav>

1 个答案:

答案 0 :(得分:2)

作为一个简单的修复,你可以给你的tabsetPanel一个id,并将相应的输入放在你的观察者中,这样当你改变标签时观察者也会失效。下面给出了工作实例,我希望这有帮助!

enter image description here

library(shiny)
library(leaflet)

pts <- data.frame(
  x = rnorm(10, mean = -93.625), 
  y = rnorm(10, mean = 42.0285)
)


# Define UI 
ui <- fluidPage(
  sliderInput("radius",
              "Point radius:",
              min = 1,
              max = 50,
              value = 30),
  tabsetPanel(id='my_tabsetPanel',
    tabPanel('Map1',
             leafletOutput('map1')   
    ), 
    tabPanel('Map2', 
             leafletOutput('map2')   
    )
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {

  output$map1 <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>% 
      setView(-93.65, 42.0285, zoom = 6)
  })
  output$map2 <- renderLeaflet({
    leaflet() %>% 
      addTiles() %>% 
      setView(-93.65, 42.0285, zoom = 6)
  })

  observe({

    input$my_tabsetPanel

    tab1 <- leafletProxy('map1', data = pts) %>%
      clearMarkers() %>% 
      addCircleMarkers(lng = ~x, lat = ~y, radius = input$radius)

    tab2 <- leafletProxy('map2', data = pts) %>% 
      clearMarkers() %>% 
      addCircleMarkers(lng = ~x, lat = ~y, radius = input$radius)

  })

}

# Run the application 
shinyApp(ui = ui, server = server)