所以我在服务器中有一个对象集合,我想在页面加载时填充 ng-repeat。
我创建了一个工厂,它从服务器上的资源中获取列表,如下所示:
app.factory('objectArray', ['$http', function($http) {
// This is returning a $$state object
// instead of response.data...
return $http.post('/get_collection').then(function(response) {
console.log(response.data);
return response.data;
});
}]);
我之前在使用 ui-router 和状态声明中的解析属性时曾使用过此代码。然而,当将此工厂直接注入我的控制器时,我得到的是 $$state 对象,而不是获取 response.data 。
我的控制器看起来像这样:
app.controller('applicationController', ['$scope', 'objectArray', function($scope, objectArray) {
$scope.array = objectArray;
console.log($scope.array);
}]);
$http 服务返回什么(以及objectArray
服务是)称为承诺。您可以通过注册将被调用的回调函数来访问实际数据当数据可用时,即当对 http 请求的响应从服务器返回时:
objectArray.then(function(data) {
$scope.array = data;
});
使用resolve时直接访问数据的原因是,当resolve函数返回promise时,路由器会等待promise被解析。然后,它才会从 Promise 中提取数据并将数据注入到控制器中。
为了更好地理解承诺,您可以阅读下面的文章 http://blog.ninja-squad.com/2015/05/28/angularjs-promises/(及其sequel http://blog.ninja-squad.com/2015/06/04/angularjs-promises-2/).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)