我使用Places library自动完成地址输入。搜索仅限于一个城市,我得到如下输出:
“Rossiya,Moskva,Leninskiy prospekt 28”
如何隐藏“Rossiya,Moskva”? ......
我的查询:
function() {
// Search bounds
var p1 = new google.maps.LatLng(54.686534, 35.463867);
var p2 = new google.maps.LatLng(56.926993, 39.506836);
self.options = {
bounds : new google.maps.LatLngBounds(p1, p2),
componentRestrictions: {country: 'ru'},
};
var elements = document.querySelectorAll('.address');
for ( var i = 0; i < elements.length; i++) {
var autocomplete = new google.maps.places.Autocomplete(elements[i],
self.options);
}
答案 0 :(得分:3)
您可以但必须在两个位置替换输入字段的值。 例如:
var autocomplete = new google.maps.places.Autocomplete(input, placesOptions);
var input = document.getElementById('searchTextField');
在'place_changed'事件中,您执行以下操作:
placeResult = autocomplete.getPlace();
//This will get only the address
input.value = placeResult.name;
这会将searchtextfield中的值更改为街道。
第二位有点棘手:
input.addEventListener('blur', function(){
// timeoutfunction allows to force the autocomplete field to only display the street name.
if(placeResult){ setTimeout(function(){ input.value = placeResult.name; }, 1); }
我们必须这样做的原因是因为如果您只为模糊添加事件监听器,那么Google地方将使用完整地址填充输入文件,因此您必须“等待”谷歌更新然后强制您通过等待几毫秒来改变。
没有setTimeout函数尝试它,你会看到我的意思。
答案 1 :(得分:2)
修改强>
你做不到。我反过来说,你只是在寻找一个城市。没有办法只从地址组件中打印出街道名称(我假设这是一个街道名称)。
<小时/> 对象提出了什么
(cities)类型集合指示Place服务返回与
locality
或administrative_area3
匹配的结果。
var input = document.getElementById('searchTextField');
var options = {
bounds: defaultBounds,
types: ['(cities)']
};
autocomplete = new google.maps.places.Autocomplete(input, options);
答案 2 :(得分:0)
结果你有哈希,从中你可以得到你想要的部分:
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
现在从“地方”你可以得到它
place.geometry.location.lat()
和地址
place.address_components[0] or place.address_components[1] ...
取决于你想要的东西
答案 3 :(得分:0)
Inside place_changed设置超时功能:
var streetString = place.address_components[0] or place.address_components[1];
window.setTimeout(function() {
$('input').val(streetString);
}, 200);
这个解决方案对我有用。
答案 4 :(得分:0)
我有一个非常类似的问题确实是可以解决的。这在Angular 2项目中也应该适用于其他地方。我过滤了机构的结果,并希望只显示名称并隐藏结果的地址部分。这对我来说很有用,一旦你选择了一个建议,就会执行一个功能:
getAddress(place: Object) {
this.zone.run(() => {
this.establishment = place['name'];
});
其中zone
是在构造函数中注入的NgZone组件,而this.establishment
是与输入字段中[(NgModel)]
绑定的变量。