在方法中看不到对象数组.(Angularjs)
An array of objects can not be seen in the method. (angularjs)
对不起我的英语。
chill.controller('messagesController', function($scope, $http, $rootScope, $location, $stateParams, $ionicSlideBoxDelegate, $ionicLoading) {
if ($rootScope.userData != undefined) {
$ionicLoading.show({
template: 'loading'
})
$http.get('http://api.getchill.co/api/v1/messages/index/id_user/'+$rootScope.userData.id_user+'/id_contact/'+$stateParams.id)
.success(function(data) {
$scope.messages = data;
for (var i = 0; i < $scope.messages.response.length; ++i) {
if ($scope.messages.response[i].type == 'location') {
var strings = $scope.messages.response[i].content.split(' ');
var lat1 = strings[0], lat2 = strings[1];
$http.get('http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat1+','+lat2+'&sensor=false')
.success(function(data) {
$ionicLoading.hide();
$scope.messages.response[i].address = data.results[0].formatted_address;
});
};
};
$ionicSlideBoxDelegate.update();
});
}
else
{
$location.path('/login');
};
});
$scope.messages.response[i].address
在success()
函数中未定义。我不知道为什么。
TypeError: Cannot set property 'address' of undefined
at messagesController.js:17
at ionic.bundle.js:17151
at processQueue (ionic.bundle.js:20962)
at ionic.bundle.js:20978
at Scope.$eval (ionic.bundle.js:22178)
at Scope.$digest (ionic.bundle.js:21994)
at Scope.$apply (ionic.bundle.js:22282)
at done (ionic.bundle.js:17439)
at completeRequest (ionic.bundle.js:17629)
at XMLHttpRequest.requestLoaded (ionic.bundle.js:17570)
控制台.log(数据): _https://dl.dropboxusercontent.com/u/99426050/ShareX/2015/01/2015-01-29_23-40-29.png
这里的问题是,调用成功函数时,i
的值已更改。 i
现在是数组的长度(因为 for 循环已经结束)。 $scope.messages.response[i]
返回未定义,因为您要在最后一个索引之后的索引处请求一个值。这是由于范围界定和闭包的行为。
Angular.forEach可以帮到你。
chill.controller('messagesController', function($scope, $http, $rootScope, $location, $stateParams, $ionicSlideBoxDelegate, $ionicLoading) {
if ($rootScope.userData != undefined) {
$ionicLoading.show({
template: 'loading'
})
$http.get('http://api.getchill.co/api/v1/messages/index/id_user/'+$rootScope.userData.id_user+'/id_contact/'+$stateParams.id)
.success(function(data) {
$scope.messages = data;
angular.forEach($scope.messages.response, function(response, i){
if (response.type == 'location') {
var strings = response.content.split(' ');
var lat1 = strings[0], lat2 = strings[1];
$http.get('http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat1+','+lat2+'&sensor=false')
.success(function(data) {
$ionicLoading.hide();
response.address = data.results[0].formatted_address;
});
};
});
$ionicSlideBoxDelegate.update();
});
}
else
{
$location.path('/login');
};
});
相关文章:
- 使用angularjs数组中的slice
- AngularJS数组的和
- 将复选框输入组映射到AngularJS数组
- 如何使用angularjs数组列表传递到服务器
- AngularJS:数组中所有对象的$watch属性
- 把AngularJS数组改成ng-repeat
- AJAX调用后Angularjs数组没有更新
- 如何在MySQL数据库中输入angularJs数组
- AngularFire在AngularJS数组中移除移位项
- AngularJS数组过滤器不起作用
- AngularJs数组不添加重复项
- 带对象的AngularJS数组
- 如果ID存在于angularjs数组中
- AngularJS -数组在其他JS文件
- AngularJS数组被重置
- 检查对象是否位于 localStorage 中的 AngularJS 数组中
- 如何将数据存储到AngularJS数组中
- 如何将html输入中的文本推送到AngularJS数组中
- 如何在排序后更新AngularJS数组
- AngularJS数组不是在View Load加载,而是在警报/控制台工作