Angular google 映射搜索框指令:尝试限制搜索时不会触发事件(使用自动完成选项)
Angular google maps search-box directive : events don't fire when trying to restrict the search (with autocomplete option)
我正在使用 Angular Google Maps 获取带有搜索框的地图。
我试图将搜索限制在 'address' 和一个国家(法国),所以我想使用指定的搜索框指令的 'Autocomplete' 选项在 documentation.
问题是我代码中的 autocomplete:true
位确实有效地限制了搜索,但它阻止了事件的触发(地图和标记不会更新)。但是控制台没有报错。
但是,如果我注释掉或删除 autocomplete:true
,事件就会触发(地图和标记会刷新),但搜索将不限于法国和地址...
这是我的代码:
var events = {
places_changed:function (searchBox) {
var place = searchBox.getPlaces();
if (!place || place == 'undefined' || place.length == 0) {
console.log('no place data :(');
return;
}
// refresh the map
$scope.map = {
center:{
latitude:place[0].geometry.location.lat(),
longitude:place[0].geometry.location.lng()
},
zoom:10
};
// refresh the marker
$scope.marker = {
id:0,
options:{ draggable:false },
coords:{
latitude:place[0].geometry.location.lat(),
longitude:place[0].geometry.location.lng()
}
};
}
};
$scope.searchbox = {
template:'searchbox.tpl.html',
events:events,
options:{
autocomplete:true,
types:['address'],
componentRestrictions:{
country:'fr'
}
}
};
并且在 html 文件中:
<div style="height: 500px;">
<script type="text/ng-template" id="searchbox.tpl.html">
<input type="text"
placeholder="{{'searchbox.google.maps' | text}}"
style="width:270px; height:30px;">
</script>
<ui-gmap-google-map center='map.center' zoom='map.zoom'>
<!--SEARCHBOX-->
<ui-gmap-search-box template="searchbox.template"
events="searchbox.events"
position="BOTTOM_RIGHT"
options="searchbox.options"></ui-gmap-search-box>
<!--MARKER-->
<ui-gmap-marker coords="marker.coords"
options="marker.options"
events="marker.events"
idkey="marker.id">
</ui-gmap-marker>
</ui-gmap-google-map>
</div>
我做错了什么?
有没有办法限制搜索和触发事件?
提前致谢!
好的,我想通了,所以我回答我自己的问题,以防其他人被卡住!
如果 autocomplete:true
,则不是 places_changed
和 searchBox.getPlaces()
,而是 place_changed
和 searchBox.getPlace()
。而且我们没有得到一系列的地方,只有 一个地方.
这是一个工作代码:
var events = {
place_changed:function (searchBox) {
var place = searchBox.getPlace();
if (!place || place == 'undefined') {
console.log('no place data :(');
return;
}
// refresh the map
$scope.map = {
center:{
latitude:place.geometry.location.lat(),
longitude:place.geometry.location.lng()
},
zoom:10
};
// refresh the marker
$scope.marker = {
id:0,
options:{ draggable:false },
coords:{
latitude:place.geometry.location.lat(),
longitude:place.geometry.location.lng()
}
};
}
};
我正在使用 Angular Google Maps 获取带有搜索框的地图。
我试图将搜索限制在 'address' 和一个国家(法国),所以我想使用指定的搜索框指令的 'Autocomplete' 选项在 documentation.
问题是我代码中的 autocomplete:true
位确实有效地限制了搜索,但它阻止了事件的触发(地图和标记不会更新)。但是控制台没有报错。
但是,如果我注释掉或删除 autocomplete:true
,事件就会触发(地图和标记会刷新),但搜索将不限于法国和地址...
这是我的代码:
var events = {
places_changed:function (searchBox) {
var place = searchBox.getPlaces();
if (!place || place == 'undefined' || place.length == 0) {
console.log('no place data :(');
return;
}
// refresh the map
$scope.map = {
center:{
latitude:place[0].geometry.location.lat(),
longitude:place[0].geometry.location.lng()
},
zoom:10
};
// refresh the marker
$scope.marker = {
id:0,
options:{ draggable:false },
coords:{
latitude:place[0].geometry.location.lat(),
longitude:place[0].geometry.location.lng()
}
};
}
};
$scope.searchbox = {
template:'searchbox.tpl.html',
events:events,
options:{
autocomplete:true,
types:['address'],
componentRestrictions:{
country:'fr'
}
}
};
并且在 html 文件中:
<div style="height: 500px;">
<script type="text/ng-template" id="searchbox.tpl.html">
<input type="text"
placeholder="{{'searchbox.google.maps' | text}}"
style="width:270px; height:30px;">
</script>
<ui-gmap-google-map center='map.center' zoom='map.zoom'>
<!--SEARCHBOX-->
<ui-gmap-search-box template="searchbox.template"
events="searchbox.events"
position="BOTTOM_RIGHT"
options="searchbox.options"></ui-gmap-search-box>
<!--MARKER-->
<ui-gmap-marker coords="marker.coords"
options="marker.options"
events="marker.events"
idkey="marker.id">
</ui-gmap-marker>
</ui-gmap-google-map>
</div>
我做错了什么? 有没有办法限制搜索和触发事件?
提前致谢!
好的,我想通了,所以我回答我自己的问题,以防其他人被卡住!
如果 autocomplete:true
,则不是 places_changed
和 searchBox.getPlaces()
,而是 place_changed
和 searchBox.getPlace()
。而且我们没有得到一系列的地方,只有 一个地方.
这是一个工作代码:
var events = {
place_changed:function (searchBox) {
var place = searchBox.getPlace();
if (!place || place == 'undefined') {
console.log('no place data :(');
return;
}
// refresh the map
$scope.map = {
center:{
latitude:place.geometry.location.lat(),
longitude:place.geometry.location.lng()
},
zoom:10
};
// refresh the marker
$scope.marker = {
id:0,
options:{ draggable:false },
coords:{
latitude:place.geometry.location.lat(),
longitude:place.geometry.location.lng()
}
};
}
};