范围变量未设置
Scope variable doesn't set
我收到地址自动完成指令和地点信息。我还添加了一个用于获取城市 ID 的代码,该代码在我过去的一个项目中工作,但现在不工作(代码中的数据 [0].place_id 具有正确的值,但 scope.form.object.localityId在函数外是空的。
PS scope.form.object...在指令的父控制器中声明并且其他变量正在填充正确
.directive('shAddressPredict', function(){
return {
require: 'ngModel',
link: function(scope, element, attrs, location) {
var options = {
types: ['address'],
};
scope.gPlace = new google.maps.places.Autocomplete(element[0], options);
google.maps.event.addListener(scope.gPlace, 'place_changed', function() {
var place = scope.gPlace.getPlace();
scope.form.object.fullAddress = place.name;
scope.form.object.placeId = place.place_id;
scope.form.object.locality = '';
scope.form.object.localityId = '';
scope.form.object.sublocality_level_1 = '';
scope.form.object.country = '';
var city = '';
angular.forEach(place.address_components, function(data) {
scope.form.object[data.types[0]] = data.long_name;
if(data.types[0] === 'locality') city += data.long_name + ', ';
if(data.types[0] === 'administrative_area_level_1') city += data.short_name + ', ';
if(data.types[0] === 'country') city += data.long_name;
});
// Geting city id
var service = new google.maps.places.AutocompleteService();
service.getPlacePredictions({
input: city,
types: ['(cities)']
}, function(data){
scope.form.object.localityId = data[0].place_id;
});
scope.$apply();
});
}
};
});
因为,scope.form.object.localityId = data[0].place_id;
行是异步调用的回调函数。意思是,您的 scope.$apply() 在范围上设置 localityId 之前被调用。因此,您还需要在设置 localityId 后触发摘要。
service.getPlacePredictions({
input: city,
types: ['(cities)']
}, function(data){
scope.$apply(function () {
scope.form.object.localityId = data[0].place_id;
});
});
我收到地址自动完成指令和地点信息。我还添加了一个用于获取城市 ID 的代码,该代码在我过去的一个项目中工作,但现在不工作(代码中的数据 [0].place_id 具有正确的值,但 scope.form.object.localityId在函数外是空的。
PS scope.form.object...在指令的父控制器中声明并且其他变量正在填充正确
.directive('shAddressPredict', function(){
return {
require: 'ngModel',
link: function(scope, element, attrs, location) {
var options = {
types: ['address'],
};
scope.gPlace = new google.maps.places.Autocomplete(element[0], options);
google.maps.event.addListener(scope.gPlace, 'place_changed', function() {
var place = scope.gPlace.getPlace();
scope.form.object.fullAddress = place.name;
scope.form.object.placeId = place.place_id;
scope.form.object.locality = '';
scope.form.object.localityId = '';
scope.form.object.sublocality_level_1 = '';
scope.form.object.country = '';
var city = '';
angular.forEach(place.address_components, function(data) {
scope.form.object[data.types[0]] = data.long_name;
if(data.types[0] === 'locality') city += data.long_name + ', ';
if(data.types[0] === 'administrative_area_level_1') city += data.short_name + ', ';
if(data.types[0] === 'country') city += data.long_name;
});
// Geting city id
var service = new google.maps.places.AutocompleteService();
service.getPlacePredictions({
input: city,
types: ['(cities)']
}, function(data){
scope.form.object.localityId = data[0].place_id;
});
scope.$apply();
});
}
};
});
因为,scope.form.object.localityId = data[0].place_id;
行是异步调用的回调函数。意思是,您的 scope.$apply() 在范围上设置 localityId 之前被调用。因此,您还需要在设置 localityId 后触发摘要。
service.getPlacePredictions({
input: city,
types: ['(cities)']
}, function(data){
scope.$apply(function () {
scope.form.object.localityId = data[0].place_id;
});
});