解决问题后的界面效果图:

在开发中,获取百度地图API,输入关键词时触发下拉列表时所遇到的问题:看下图
用的示例是:http://lbsyun.baidu.com/jsdemo.htm#a6_2
// 百度地图API功能
function G(id) {
return document.getElementById(id);
}
var map = new BMap.Map("l-map");
map.centerAndZoom("北京",12); // 初始化地图,设置城市和地图级别。
var ac = new BMap.Autocomplete( //建立一个自动完成的对象
{"input" : "suggestId"
,"location" : map
});
ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件
var str = "";
var _value = e.fromitem.value;
var value = "";
if (e.fromitem.index > -1) {
value = _value.province + _value.city + _value.district + _value.street + _value.business;
}
str = "FromItem
index = " + e.fromitem.index + "
value = " + value;
value = "";
if (e.toitem.index > -1) {
_value = e.toitem.value;
value = _value.province + _value.city + _value.district + _value.street + _value.business;
}
str += "
ToItem
index = " + e.toitem.index + "
value = " + value;
G("searchResultPanel").innerHTML = str;
});
var myValue;
ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
var _value = e.item.value;
myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
G("searchResultPanel").innerHTML ="onconfirm
index = " + e.item.index + "
myValue = " + myValue;
setPlace();
});
function setPlace(){
map.clearOverlays(); //清除地图上所有覆盖物
function myFun(){
var pp = local.getResults().getPoi(0).point; //获取第一个智能搜索的结果
map.centerAndZoom(pp, 18);
map.addOverlay(new BMap.Marker(pp)); //添加标注
}
var local = new BMap.LocalSearch(map, { //智能搜索
onSearchComplete: myFun
});
local.search(myValue);
}
下面给出自己解决的方法:
html代码:
<el-autocomplete
class="inline-input"
v-model="addressDetail"
:fetch-suggestions="querySearch"
placeholder="搜索您的街道、小区、大厦名称"
:trigger-on-focus="false"
:maxlength="20"
@select="handleSelect">
<template slot-scope="{ item }">
{{ item.address }}<span>{{item.city}}</span>
</template>
</el-autocomplete>
JS代码:
export default {
name: 'recover-page',
data () {
return {
addressDetail : null,
adderss : '',
map: null,
local: null,
restaurants: []
}
},
props: {},
watch: {
addressDetail(val) {//监听addressDetail的变化
this.local.search(val);
}
},
computed: {},
methods: {
querySearch(queryString, cb) {
let restaurants = [];
restaurants = this.restaurants;
let results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
// 调用 callback 返回建议列表的数据
cb(results);
},
createFilter(queryString) {
/*return (restaurant) => {
return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);
};*/
return (restaurant) => {
return restaurant
}
},
loadAll() {
return this.restaurants;
},
handleSelect(item) {
console.log("item",item);
this.map.clearOverlays();
this.addressDetail = item.address;
const pp = item.point;
this.map.centerAndZoom(pp, 15);
this.map.addOverlay(new BMap.Marker(pp));
},
baiduMap : function () {
//let map = new BMap.Map("allmap");
let _this = this;
_this.map.centerAndZoom("广州",12); // 初始化地图,设置城市和地图级别。
let geolocation =new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if (this.getStatus()==BMAP_STATUS_SUCCESS) {
let mk=new BMap.Marker(r.point);
_this.map.addOverlay(mk);
_this.map.panTo(r.point);
//alert('您的位置:'+r.point.lng+','+r.point.lat);
}else {
//alert('您的手机不支持定位服务');
}
});
_this.local = new BMap.LocalSearch(_this.map, {
onSearchComplete: function(results){
// 判断状态是否正确
if (_this.local.getStatus() == BMAP_STATUS_SUCCESS){
_this.restaurants = [];
for (let i = 0; i < results.getCurrentNumPois(); i ++){
_this.restaurants.push(results.getPoi(i));
}
}
}
});
//_this.local.search(_this.addressDetail);
},
},
components: {
},
beforeCreate() {
},
created() {
},
mounted() {
this.map = new BMap.Map("allmap");
this.$nextTick(()=>{
let t1 = setTimeout(()=>{
this.baiduMap();
clearTimeout(t1)
},10);
});
this.loadAll();
},
beforeMount() {
},
beforeUpdate() {
},
updated() {
},
activated() {
},
deactivated() {
},
beforeDestroy() {
},
destroyed() {
},
errorCaptured() {
}
}
嗯,问题解决!
Copyright © 2009-2019 Ywcms.Com All Right Reserved. 湖南严微网络科技有限公司©版权所有 湘ICP备16006489号-2