Учитывая следующие данные на сервере:Изменение угловых переменных области применения с использованием 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? (N.B .: Я новичок в угловых и Javascript структур в целом.)
Оба вызова '$ http.get' являются асинхронными. Таким образом, пока не будет запущено 'forEach', данных еще не будет. –
'foreach' попадает перед' .success' каждого вызова 'http' из-за природы * async * – christiandev