我有一个mainCtrl,我在index.html的标签中注入:
<html ng-app="app" lang="fr" ng-controller="mainCtrl" xmlns:ng="http://angularjs.org">
因此,当我显示任何模板(页面)时,会调用index.html,因此也会调用mainCtrl。
对于每个被调用的视图,我在$ routeProvider中附加一个特定的控制器,如下所示:
.when("/factures",
{
controller: "facturesCtrl",
templateUrl: "assets/partials/factures.tpl.html",
resolve: {
checkPermission: function(Auth){
return Auth.getUser();
}
}
})
在我的情况下,dataUsers函数调用一个带有几个参数的工厂,这些参数确定我将调用哪个URL(来自api),因此参数取决于函数。实施例。
mainCtrl:
$scope.dataUsers = function()
{
$rootScope.PARAMS.a = 'all';
User.get($rootScope.PARAMS, 'client', '').then(function(dataUsers)
{
//...
}, function(reason){
// ...
}
}
user.fct.js
function getUserData($rootScope, $q, $http, $timeout, loadData)
{
return {
get: function(user, type, responseType)
{
var deferred = $q.defer();
loadData.post('POST', $rootScope.directory + 'api/'+ type, user, responseType, function(data){
if(data.status == 'ok')
{
$timeout(function(){
deferred.resolve(data);
}, 250);
}
});
return deferred.promise;
}
}
}
在某些情况下,我会使用不同的参数调用同一工厂。例如,账单控制器也会调用http.get工厂(上图)来显示最后一个客户账单。
facturesCtrl
$scope.dataFactures = function()
{
$rootScope.PARAMS.a = 'last';
User.get($rootScope.PARAMS, 'facture', '').then(function(dataFactures)
{
//...
}, function(reason){
//...
});
}
$scope.dataFactures();
现在我的问题:
两个控制器: mainCtrl 和 FacturesCtrl 在我的root / factures的同时被调用。
因此,同一个工厂被调用两次,但参数是假的。例如,Angular JS似乎使用以下顺序调用differentes方法:
1) dataUsers() -> rooscope.action = "all"
2) dataFactures() -> rooscope.action = "last"
3) get.getUserData(params, 'string')-> params = "all", 'string' = '/client'
3) get.getUserData(params, 'string')-> params = "last", 'string' = '/factures'
should be :
1) dataUsers() -> rooscope.action = "all"
2) get.getUserData(params, 'string')-> params = "all", 'string' = '/client'
2) dataFactures() -> rooscope.action = "last"
3) get.getUserData(params, 'string') -> params = "last", 'string' = '/factures'
因为,参数是混合的,通过这种方式API返回错误!
我试过了:
在启动回调承诺时调用dataUsers函数:
mainCtrl:
$scope.dataUsers = function()
{
$rootScope.PARAMS.a = 'all';
User.get($rootScope.PARAMS, 'client', '').then(function(dataUsers) //...
//..
}
facturesCtrl:
$scope.dataFactures = function()
{
$rootScope.PARAMS.a = 'last';
User.get($rootScope.PARAMS, 'facture', '').then(function(dataFactures)
{
// DATA USERS START
$scope.dataUsers();
}, function(reason){
//...
});
}
$scope.dataFactures();
这个工作正常,但我不喜欢这种方法,因为:
我希望我足够清楚,换句话说我不知道配置应用程序的方式是否合适......
提前感谢您的澄清:)