我有AngularJs控制器:
function MyController($scope, $http) {
// as $http.get() is async, success() returns promise but
// I need the actual value 'items'
var promise = $http.get(...)
.success(function(response) {return response.items;});
<waitForAjaxCall>
$scope.items = promise.get?();
$scope.firstItem = $scope.items[0];
//do stuff using $scope.firstItem
}
var myApp = angular.module('myApp',[]);
myApp.controller('MyController', ['$scope', '$http', MyController]);
如何确保$scope.items
在$scope.firstItem = ...
分配之前由ajax调用返回的值初始化items
?我看到的另一种方法是将{{1}}包装在调用$ http的angularjs工厂中,但我仍然需要等待ajax调用在此工厂内完成。
答案 0 :(得分:1)
您不能同步等待Ajax调用完成。您需要在success
回调中初始化范围:
function MyController($scope, $http) {
function init(items) {
$scope.items = items;
$scope.firstItem = $scope.items[0];
//do stuff using $scope.firstItem
}
$http.get(...)
.success(function(data) {
init(data.items);
});
}
答案 1 :(得分:0)
我实际上就是这样做的:
<div>{{items[0].name}}</div>
每当设置$scope.items
时,第一个项目就会绑定在那里。