gpt4 book ai didi

javascript - 在 Controller 之前从服务加载数据

转载 作者:行者123 更新时间:2023-11-28 01:30:17 25 4
gpt4 key购买 nike

您好,我想在加载任何 Controller 之前从工厂加载数据。我找到了一种使用解析来做到这一点的方法:

angular.module('agent', ['ngRoute','ui.bootstrap','general_module', 'order_module','customer_module']).config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/customer', {
templateUrl: 'customer_module/partials/customer.php',
resolve:{
'MyServiceData':function(loginvalidation){
// MyServiceData will also be injectable in your controller, if you don't want this you could create a new promise with the $q service
var a=loginvalidation.check_usertype();
}}
}
);
$routeProvider.otherwise({redirectTo: '/customer'});
}]);

但问题是我必须在每条路线上重复此操作。 AngularJS 有没有一种方法可以在启动任何 Controller 之前编写一次代码来加载服务(无需重复我的代码)?

谢谢

最佳答案

我做的一件事是在我的 Controller 函数中,我在根级别没有任何代码。仅函数声明。请参阅此处:

angular.module('app').controller('TestCtrl',function($scope){

//no code here at root level, except for some init call
init();

function init(){
//some init code
service.getSomeData().then(function(data){
//Tell your controller to run here
$scope.dataLoaded = true;
doSomethingWithData(data);
});
}

function addSomeWatch(){
//some watch code here
}

function foo(bar){
//something crazy
}
});

这取决于您的服务调用所有返回 promise ,无论如何它们都应该这样做。

angular.module('app').factory('TestService', function(){

return {
getSomeData : function(){
var d = $q.deferred();
$http.get('someurl')
.then(function(resp){
d.resolve(resp);
});
return d.promise;
}
}

});

关于javascript - 在 Controller 之前从服务加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22212159/

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