我在我的 ionic 应用程序中使用了 google 自动搜索地点 API。它开始搜索但我的列表在选择一个地方后无法关闭
i used google auto search places API in my ionic app. It start search but my list cannot dismiss after selecting a place
page.html
<ion-searchbar [(ngModel)]="address" (ionCancel)="dismiss()" name="address" id="address"
(ionInput)="searchPlace()" autofocus>
</ion-searchbar>
<ion-list style="margin-top: 20px;" >
<ion-item class="addressList" *ngFor="let item of autocompleteItems"
(click)="selectAddress(item)">
<ion-icon name="pin">
</ion-icon>
<p><small>{{ item.formatted_address }}</small></p>
</ion-item>
</ion-list>
</ion-content>
page.ts
updateSearch(){
console.log(this.address);
let address = this.address;
let me = this;
let location = [];
let element = document.getElementById("map");
let service = new google.maps.places.AutocompleteService();
service.getPlacePredictions({ input: address },
function(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
//this.autocomplete = { input: '' };
this.autocompleteItems = [];
} else {
for (var i = 0; i < predictions.length; i++) {
let googlePlacesService = new google.maps.places.PlacesService(element);
googlePlacesService.getDetails({
reference: predictions[i].reference
},
function(details, status){
if(details){
//setTimeout(() => {
location.push(details);
if(i == predictions.length){
me.autocompleteItems = location;
console.log(location);
}
//console.log(details);
//}, 1000*(i+1);
}
});
}
}
});
}
searchPlace(){
//console.log(this.address);
let address = this.address;
let me = this;
let location = [];
let element = document.getElementById("map");
let service = new google.maps.places.AutocompleteService(this.mapElement, {
types: ['address']
});
service.getPlacePredictions({ input: address },
function(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
this.autocompleteItems = [];
} else {
for (var i = 0; i < predictions.length; i++) {
let googlePlacesService = new google.maps.places.PlacesService(element);
googlePlacesService.getDetails({
reference: predictions[i].reference
}, function(details, status){
if(details){
//setTimeout(() => {
location.push(details);
if(i == predictions.length){
me.autocompleteItems = location;
console.log(location);
}
//console.log(details);
//}, 1000*(i+1);
}
});
}
}
});
}
selectAddress(item){
let data : any;
let custom = data;
this.name = name;
console.log(item)
this.address = item.formatted_address;
if(typeof item.geometry.location.lat != 'function'){
this.start_pos = {
lat: item.geometry.location.lat,
lng: item.geometry.location.lng
};
// console.log( item.geometry.location.lat );
} else {
let data = item.geometry.location.toString();
data = data.replace(/[{()}]/g, '');
let latlngStr = data.split(',', 2);
this.start_pos = {
lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])
};
console.log(this.start_pos);
}
//this.viewCtrl.dismiss({lat: this.start_pos.lat, long: this.start_pos.lng, name: name});
}
ionViewDidLoad() {
console.log('ionViewDidLoad createappointment');
}
每当我从列表中选择一个地址时,它会显示在我的搜索栏中,但之后该列表不会消失,而且如果我删除所选地址,那么在这种情况下也会出现同样的问题。
从列表中选择地址后如何关闭列表。请帮助我,我没有
找出我的代码哪里出了问题。感谢您的帮助。
在您的 selectAddress
函数中,在最后创建 autocompleteItems
空数组。所以它消失了。
selectAddress(item){
// your code
.
.
..
this.autocompleteItems = [];
}
page.html
<ion-searchbar [(ngModel)]="address" (ionCancel)="dismiss()" name="address" id="address"
(ionInput)="searchPlace()" autofocus>
</ion-searchbar>
<ion-list style="margin-top: 20px;" >
<ion-item class="addressList" *ngFor="let item of autocompleteItems"
(click)="selectAddress(item)">
<ion-icon name="pin">
</ion-icon>
<p><small>{{ item.formatted_address }}</small></p>
</ion-item>
</ion-list>
</ion-content>
page.ts
updateSearch(){
console.log(this.address);
let address = this.address;
let me = this;
let location = [];
let element = document.getElementById("map");
let service = new google.maps.places.AutocompleteService();
service.getPlacePredictions({ input: address },
function(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
//this.autocomplete = { input: '' };
this.autocompleteItems = [];
} else {
for (var i = 0; i < predictions.length; i++) {
let googlePlacesService = new google.maps.places.PlacesService(element);
googlePlacesService.getDetails({
reference: predictions[i].reference
},
function(details, status){
if(details){
//setTimeout(() => {
location.push(details);
if(i == predictions.length){
me.autocompleteItems = location;
console.log(location);
}
//console.log(details);
//}, 1000*(i+1);
}
});
}
}
});
}
searchPlace(){
//console.log(this.address);
let address = this.address;
let me = this;
let location = [];
let element = document.getElementById("map");
let service = new google.maps.places.AutocompleteService(this.mapElement, {
types: ['address']
});
service.getPlacePredictions({ input: address },
function(predictions, status) {
if (status != google.maps.places.PlacesServiceStatus.OK) {
this.autocompleteItems = [];
} else {
for (var i = 0; i < predictions.length; i++) {
let googlePlacesService = new google.maps.places.PlacesService(element);
googlePlacesService.getDetails({
reference: predictions[i].reference
}, function(details, status){
if(details){
//setTimeout(() => {
location.push(details);
if(i == predictions.length){
me.autocompleteItems = location;
console.log(location);
}
//console.log(details);
//}, 1000*(i+1);
}
});
}
}
});
}
selectAddress(item){
let data : any;
let custom = data;
this.name = name;
console.log(item)
this.address = item.formatted_address;
if(typeof item.geometry.location.lat != 'function'){
this.start_pos = {
lat: item.geometry.location.lat,
lng: item.geometry.location.lng
};
// console.log( item.geometry.location.lat );
} else {
let data = item.geometry.location.toString();
data = data.replace(/[{()}]/g, '');
let latlngStr = data.split(',', 2);
this.start_pos = {
lat: parseFloat(latlngStr[0]), lng: parseFloat(latlngStr[1])
};
console.log(this.start_pos);
}
//this.viewCtrl.dismiss({lat: this.start_pos.lat, long: this.start_pos.lng, name: name});
}
ionViewDidLoad() {
console.log('ionViewDidLoad createappointment');
}
每当我从列表中选择一个地址时,它会显示在我的搜索栏中,但之后该列表不会消失,而且如果我删除所选地址,那么在这种情况下也会出现同样的问题。
从列表中选择地址后如何关闭列表。请帮助我,我没有
找出我的代码哪里出了问题。感谢您的帮助。
在您的 selectAddress
函数中,在最后创建 autocompleteItems
空数组。所以它消失了。
selectAddress(item){
// your code
.
.
..
this.autocompleteItems = [];
}