我想在app.config部分为每个控制器加载一些配置。每个控制器都需要加载不同但非互斥的数据集。我无法弄清楚如何实现这一目标。
.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider){
$routeProvider
.when('/', {
templateUrl: "partials/pages/dashboard.html",
controller: "dashboard_controller",
resolve: { dash_config: 'SomeConfigD'},
})
.when('/a', {
templateUrl: "partials/pages/a.html",
controller: "a_controller",
resolve: { dash_config: 'SomeConfigA'},
})
}])
但是,我不想为someConfigA
和someConfigD
编写单独的工厂,因为它们共享代码。我想要类似的东西,
app.factory('configFactory', function(...){
var factory = ;
function get1(){
// some $http calls here and return a promise
}
function get2(){
// some $http calls here and return a promise
}
function get3(){
// some $http calls here and return a promise
}
factory.configA = function(){
// return a promise to resolve both get1 and get2
};
factory.configD = function(){
// return a promise to resolve both get2 and get3
};
})
我该怎么做?
答案 0 :(得分:0)
听起来你正在寻找的是$q.all
,你可以阅读here。
我还制作了一个使用你工厂的fiddle,虽然我是在模块的run方法中做的,因为我不想处理创建工厂。它看起来像这样:
f.configA = function(){
var get12 = $q.all([
get1().then(thenFn),
get2().then(thenFn)
]).then(function() {
console.log('both resolved');
});
return get12;
};
只有当两个promises都已解决时才会调用then中的函数(在不同的时间发生,使用$timeout
进行模拟
现在get函数可以重用了,希望这有帮助!