gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 12:33:48 26 4
gpt4 key购买 nike

我正在尝试在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com