我试图在控制器开始运行之前初始化我的应用程序服务。
我本以为我可以通过首先解决一个承诺返回功能来实现这一点:
va.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/', {templateUrl: '../partials/home.php', controller: 'VaCtrl',resolve: {
pp: vac.loadData
}});
}]);
var vac = va.controller('VaCtrl',function($scope,$http,$q,packingProvider){
console.dir(packingProvider.data[2]);
});
vac.loadData = function($http,$timeout,$q,packingProvider){
$http.post('../sys/core/fetchPacking.php').then(function(promise){
packingProvider.data = promise.data;
});
var defer = $q.defer();
$timeout(function(){
defer.resolve();
},2000);
return defer.promise;
};
但是,在解决承诺之前,控制器仍处于加载状态,从而导致控制台大吼大叫
无法读取未定义的属性“ 2”
对我。
我究竟做错了什么?
编辑:
同样,控制器似乎被调用了两次,第一次是使用未定义的pacingProvider.data对象,第二次是使用secons,一切正常。
而不是使用的promise
由归国$timeout
,你可以直接使用promise
的返回$http
。
用loadData
这种方式重写您的fn-
vac.loadData = function($http,$timeout,$q,packingProvider){
var promise = $http.post('../sys/core/fetchPacking.php').then(function(promise){
packingProvider.data = promise.data;
});
return promise;
};
在General Usage
此处阅读本节的第一行- $ http promise
同样,resolve
是一张依赖关系图。
resolve-{Object。=}-可选的依赖关系映射,应将其注入到控制器中。如果这些依赖关系中的任何一个是应许的,路由器将在实例化控制器之前等待所有这些依赖关系被解决或被拒绝。
因此,Angular将自动公开地图以进行注入。因此,您可以执行此操作-
var vac = va.controller('VaCtrl', function($scope, pp){
// 'pp' is the name of the value in the resolve map for $routeProvider.
console.dir(pp[2]);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句