使用forEach修改角度范围变量
Modifying Angular scope variables using forEach
给定服务器上的以下数据:
people.json
:
{
"Bill": "Bill the Man",
"Jane": "Jane Doe",
"Jack": "Jack the Ripper"
}
groups.json
:
[
["Bill", "Jack"],
["Jane", "Jack"]
]
我在controllers.js
:中导入它
var websiteApp = angular.module('websiteApp', []);
websiteApp.controller('websiteCtrl', function ($scope, $http) {
// import data
$http.get('people.json').success(function (data) {
$scope.people = data;
});
$http.get('groups.json').success(function (data) {
$scope.groups = data;
});
// fill groups with people data
$scope.groups.forEach(function (group, i) {
group.forEach(function (person, j) {
$scope.groups[i][j] = $scope.people[person];
});
});
});
然后我将其与以下模板一起使用:
<ul>
<li ng-repeat="group in groups">
<ul><li ng-repeat="person in group">{{person}}</li></ul>
</li>
</ul>
我本想从people.json
中得到一个名字列表,但我得到了groups.json
中的名字。对console.log
的一些进一步研究表明,forEach
循环没有被执行。在分配给范围之前,使用局部变量存储数据的进一步试验也没有成功。
我应该如何处理这个问题?关于Angular的工作原理,我有什么不了解的?(注意:我一般是Angular和Javascript框架的新手。)
试试这样的。。。
var websiteApp = angular.module('websiteApp', []);
websiteApp.controller('websiteCtrl', function($scope, $http, $q) {
// import data
getPeopleAndGroups = function() {
var people = $http.get('people.json');
var groups = $http.get('groups.json');
return $q.all([people, groups]);
}
getPeopleAndGroups().then(function(data) {
var people = data[0].data;
var groups = data[1].data;
// fill groups with people data
groups.forEach(function(group, i) {
group.forEach(function(person, j) {
$scope.groups[i][j] = $scope.people[person];
});
});
})
});
使用$q
库,您可以返回一个promise,所以这应该会帮助您——我在工作时无法验证它,但它应该会让您步入正轨。看看Angular q Library
$http
本质上是异步的,当两个ajax请求都完成时,您需要调用foreach
。例如:
var websiteApp = angular.module('websiteApp', []);
websiteApp.controller('websiteCtrl', function ($scope, $http) {
// import data
$http.get('people.json').success(function (data) {
$scope.people = data;
$http.get('groups.json').success(function (data) {
$scope.groups = data;
// fill groups with people data
$scope.groups.forEach(function (group, i) {
group.forEach(function (person, j) {
$scope.groups[i][j] = $scope.people[person];
});
});
});
});
});
相关文章:
- ngDialog-弹出窗口未更新范围变量
- AngularJS范围变量Unwatch
- 将外部控制器的范围变量设置为角度
- 对于使用传递的数据计算的局部范围变量,角度绑定在自定义指令中不起作用
- 如何使用EnquireJS使AngularJS范围变量依赖于媒体查询
- 具有范围变量的控制器不工作
- 范围变量返回长度错误
- 将 NodeJS 模块范围变量作为对象访问
- Angularjs 更新 setTimeout 中的范围变量不起作用
- 递归承诺调用 - 内存范围变量问题
- AngularJS:从指令设置范围变量
- Angularjs:访问范围变量数组并计算平均值
- 范围变量更新,但不更新视图
- 从html调用angularjs控制器中的一个函数,但未定义范围变量
- 如何在编辑范围变量时(暂时)避免摘要循环
- 防止Angular范围变量通过引用自动绑定到服务私有成员
- 使用 AngularJS 从指令设置范围变量
- 集合回调忽略范围变量
- 使用forEach修改角度范围变量
- 因果报应测试中未定义的预期范围变量