[TOC]
#### Vue 利用高德定位实现饿了么定位当前位置
![](https://box.kancloud.cn/f1b8d5a28c12f06941a36c54afea7415_376x382.png)
1. 注册高德开发者 https://lbs.amap.com
2. 创建一个应用,拿到key
![](https://box.kancloud.cn/d33ae75346edb52b8e0106dd6ac07645_728x576.png)
3. 获取JS代码
![](https://box.kancloud.cn/4f8eba35d14d91f035da3b655670825c_563x261.png)
4. public / index.html 引入代码
>[danger] 注意,一定要在头部引入
![](https://box.kancloud.cn/f9af25d283f6893b5cf475027c8bb83b_681x356.png)
5. App.vue 中加入以下代码
~~~
<template>
<div id="app">
<router-view />
</div>
</template>
<script>
import { createNamespacedHelpers } from 'vuex'
const { mapActions } = createNamespacedHelpers('city');
export default {
name: 'app',
created() {
this.getLocation()
},
methods: {
...mapActions([
'setlocation',
'setcity'
]),
getLocation() {
const self = this;
AMap.plugin('AMap.Geolocation', function() {
var geolocation = new AMap.Geolocation({
// 是否使用高精度定位,默认:true
enableHighAccuracy: true,
// 设置定位超时时间,默认:无穷大
timeout: 10000
})
geolocation.getCurrentPosition()
AMap.event.addListener(geolocation, 'complete', onComplete)
AMap.event.addListener(geolocation, 'error', onError)
function onComplete (data) {
// data是具体的定位信息
// 存入vuex中
self.setlocation(data)
self.setcity(data.formattedAddress)
}
function onError (data) {
// 定位出错
self.getLngLatLocation()
}
})
},
getLngLatLocation() {
const self = this;
AMap.plugin('AMap.CitySearch', function () {
var citySearch = new AMap.CitySearch()
citySearch.getLocalCity(function (status, result) {
if (status === 'complete' && result.info === 'OK') {
// 查询成功,result即为当前所在城市信息
AMap.plugin('AMap.Geocoder', function() {
var geocoder = new AMap.Geocoder({
// city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
city: result.adcode
})
var lnglat = result.rectangle.split(";")[0].split(",");
geocoder.getAddress(lnglat, function(status, data) {
if (status === 'complete' && data.info === 'OK') {
// result为对应的地理位置详细信息
// 存入 vuex 中
self.setlocation({
addressComponent: {
city: result.city,
province: result.province
},
formattedAddress: data.regeocode.formattedAddress
});
self.setcity(data.regeocode.formattedAddress)
}
})
})
}
})
})
}
}
}
</script>
<style lang="stylus">
#app
width 100%
height 100%
overflow hidden
background-color: #f5f5f5;
</style>
~~~
6. 如何使用
在需要使用定位的组件中写入以下代码:
![](https://box.kancloud.cn/41fb8bedf6590fdc95dd2e0205478c9f_518x394.png)
![](https://box.kancloud.cn/705d346e6602fb18d723a7df332fa5cc_523x292.png)
- 起步
- 环境搭建
- mock数据
- 基础
- 生命周期
- 过滤器
- 过渡动画
- keyframes动画
- 动画JS钩子
- 路由
- 导航守卫
- 全局守卫
- 监听器
- 自定义组件
- 获取焦点
- mixins
- mixins抽离vuex
- 国际化
- 动态组件
- Dom
- 扩展
- 安装devTools
- scss
- Nuxt引用多个UI库
- vuex
- vuex命名空间
- vuex定义
- cli
- 安装与卸载
- 环境变量
- 杂项
- Mock数据
- FeHelper
- git
- 反向代理
- 本地存储
- stylus
- 常用mixins
- jsonp
- 配置
- mock配置
- 跨域配置
- 自定义路径
- px2rem
- 代理后端请求
- 常用算法
- 字母排序城市数据
- 倒计时
- 通讯录数据结构
- 请求
- axios防止多次请求
- 封装axios请求
- axios使用
- 封装axios
- 插件
- BetterScroll
- 高德定位
- polyfill
- fastClick
- LazyLoad
- storageCache
- moment
- keyFrameAnimation
- vueSwiper
- 组件
- Loading组件
- header组件
- 仿有道App导航
- SupportIcon
- 仿饿了么购物车跳动
- 购物车小球缓动
- 小球飞入购物车
- 仿音乐歌手列表
- 唱片飞入效果
- 搜索组件
- 仿美团PC搜索框
- 页面布局
- stickyFooter
- 背景色渐变
- 背景虚化
- Ui组件
- CubeUi
- CreateApi
- tab滑屏切换
- 索引列表
- BScroll
- BScroll左右联动导航
- vant
- 函数库
- 常用Dom函数库
- axios封装
- 格式化音乐播放时长
- 搜索节流
- time格式化
- JS基础
- window对象中的高度
- JS中的宽高
- 常用正则
- nuxt
- nuxtVuex
- 监听页面滚动
- 监听body滚动
- 监听局部滚动