arcgis for js Popup弹窗挂载vue组件

1.解决问题

点击图层里的要素时弹出popup,并在内容中content挂载业务组件,子组件中正常使用vue的生命周期与钩子函数。

2.实现方法

2.1.子组件Popup.vue

(这里只做简单的示例,可根据自己的业务需求设计组件)

<template>
  <div>
    {{obj}}
  </div>
</template>
<script>
  export default {
    components: {},
    props: ['obj'],
  }

2.2.父组件 MapView.vue(包含视图点击事件、popup打开与子组件挂载到popup)

  • 引入所需的
import TwoMap from '@/components/2D-map'
import Popup from './Popup'
import Vue from 'vue'
  • 视图点击事件声明
export function viewOnClickEventLOad(view, callback) {
  view.popup.autoOpenEnabled = false
  view.on('click', (event) => {
    view.hitTest(event).then(function(response) {
      if (response.results[0]) {
        callback({
          event,
          response,
        })
      }
    })
  })
}
  • 置空之前点击的高亮
export function removeHighlight(highlight) {
  if (highlight) {
    highlight.remove()
  }
  return null;
}
  • 视图点击以后的回调
viewOnClickEventLOad(self.view, ({event, response}) => {
  let graphic = response.results[0].graphic
  // 置空之前的高亮
  self.highlight = removeHighlight(self.highlight)
  // 高亮点击的要素
  self.view.whenLayerView(graphic.layer).then(function(lyrView) {
   self.highlight = lyrView.highlight(graphic)
  })
  self.view.goTo(graphic.geometry)
  self.openPopup(event.mapPoint, graphic)
});
  • 打开popup
openPopup(point, graphic) {
    let self = this;
    // 要素中的属性对象 graphic.attributes
    let name = graphic.attributes.name
    self.view.popup.open({
      title: name,
      location: point,
      content:'加载中...'
    })
    const p = Vue.extend(Popup)
    let vm = new p({
      propsData: {
        obj: '传参'
      }
    })
    vm.$mount();
    vm.$nextTick(()=>{
      self.view.popup.content = vm.$el
    })
  }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值