AngularJS-在控制器之前初始化服务

用户名

我试图在控制器开始运行之前初始化我的应用程序服务。

我本以为我可以通过首先解决一个承诺返回功能来实现这一点:

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,一切正常。

Apoorv Parijat

而不是使用的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章