javascript - AngularJS - 在 Controller 之前初始化服务

标签 javascript angularjs

我正在尝试在 Controller 开始运行之前初始化我的应用程序服务。

我本以为我可以通过首先解决 promise 返回函数来实现这一目标:

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;
};

然而,在promise被解决之前 Controller 仍然被加载,导致控制台大喊

Cannot read property '2' of undefined

对着我。

我做错了什么?

编辑:

此外, Controller 似乎被调用了两次,第一次使用未定义的pacingProvider.data对象,两秒后一切正常。

最佳答案

您可以直接使用 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;
};

阅读此处一般用法部分的第一行 - $http promise

此外,resolvemap of dependencies .

resolve - {Object.=} - An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated.

因此,Angular 将自动公开映射以进行注入(inject)。所以,你可以这样做 -

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]);
});

关于javascript - AngularJS - 在 Controller 之前初始化服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298934/

相关文章:

javascript - $scope 不从表单输入中获取字符串 - AngularJS,JS

javascript - 在 CasperJS 中使用eachThen和thenOpen在超时时继续下一个URL

javascript - angular-drag-and-drop-lists 拖动的元素消失(chrome)

javascript - HTML 表单元素属性和属性冲突时的优先级

angularjs - <router-outlet> 和 <div ng-view>,AngularJS 和 Angular 同时路由

angularjs - AngularJS $http POST 文件上传进度示例

javascript - 在包含 JsonIdentityInfo 的 JavaScript 中反序列化 Jackson 对象

javascript - 无法加载 JSON (Javascript)

javascript - 如何使用 CSS 隐藏所有复选框

javascript - 使用 AngularJS 动态改变路线