一转眼又是一个月过去了, 天气越来越冷了, 前几天外公去世, 然后披星斩月得赶回家去, 熬了两晚上又赶回来上班, 舟车劳顿, 回来就感冒一直溜鼻涕.生命是真的脆弱, 家人一天天的老去, 而我行尸般的活再这个城市, 漫无目的的流浪.
公司一直运营这APP端和小程序端, 最近领到突发奇想想搞个网页端, 这样嵌套到别人的APP里面. OK, 从微信小程序迁移到Vue嘛, 差异还算不太大, 就是小程序那边的地图全是原生腾讯地图, 而vue这把我打算使用高德的jssdk来搞, 小程序那边已经把数据全算好了, 而且考虑到后期维护两边代码, 所以统一两边的api还是非常有必要的嘛.
在小程序里面map是一个小程序的原生组件, 而在vue里面我们也可以去搞一个自定义组件嘛, 然后全局注册下就行, 我们先在vue项目的components目录下创建一个map.vue, 在创建一个实时视图先引入这个组件, 实时的预览, 好像vue的组件热更新有点反应迟钝, 所以偶尔需要我们手动点击f5在刷新页面.
先来编辑下html模板部分, 创建一个id为map的div, 小程序map里面可以包含一些啥core-view, core-view这些组件, 我们这就直接来个slot插槽来让我们地图组件丰富起来吧.
1 | <template> |
代码都是虚得, 先来把地图弄出来才是真的, 先在script标签中的vue => mounted() 中来选中map来给他填充上地图, 至于为啥是mounted而不是created ? 我们填充地图需要vue把页面渲染好之后才能进行渲染把, 然后created钩子下面页面还没开始渲染呢.
1 | mounted(){ |
就这样我们在给map组件设置一个高度宽度, 地图就能渲染出来了, 不过我们是还需要实现更多的功能, 就这样才刚刚开始呢, 不过渲染出地图就代表我们走到了最关键的一步呢.
先一个一个的来, 首先我们会从父级传来一个坐标, 然后地图移动到指定的坐标嘛. 嗯,,, 先来props里面定义咯
1 | props: { |
小程序那边那些 markers 真的非常赞呢, 嗯先来搞这个把
1 | props: { |
既然是地图, 那怎能没有定位了, 来封装下Promise定位的功能,对了那个啥初始化位置建议先直接在链接里面把组件导入全咯, 异步加载那些组件坑稍稍有点多, 直接在链接后面加上 &plugin=AMap.Geolocation,AMap.Geocoder 会方便很多呢
1 | methods: { |
用户操作地图的监听呢. 老样子先在props里面定义一个方法,然后在mounted初始化地图里面监听拖拽事件, 然后丢给我们自己定义的方法去处理
1 | props: { |
还有还多啥线路规划, 地理位置解析, 地址搜索, 这些功能我就不一一解析了, 我直接把我自己的代码贴出来把
1 | <!-- |