.factory函数中发生该错误。在我的项目中,我有两个.factory
,它们互相使用。以下是我的控制器:
.controller('MyCtrl', function($scope, Factory_A) {
$scope.do = function(){
Factory_A.do_A();
};
})
场景1:
.factory('Factory_A', function(Factory_B){
var value_A = 1;
return{
do_A: function(){
if(value_A == 1){
value_A++;
Factory_B.do_B();
}
else{
return "Success"
}
}
}
})
.factory('Factory_B', function(Factory_A){
var value_B = 0;
var do_B_1 = function(){
Factory_A.do_A();
};
return{
do_B: function(){
value_B++;
if(value_B > 0){
do_B_1();
}
return true;
}
}
});
错误:[$ injector:cdep]找到循环依赖项:Factory_A< - Factory_B< - Factory_A
场景2:
.factory('Factory_A', function(){
var value_A = 1;
return{
do_A: function(){
if(value_A == 1){
value_A++;
Factory_B.do_B();
}
else{
return "Success"
}
}
}
})
.factory('Factory_B', function(Factory_A){
var value_B = 0;
var do_B_1 = function(){
Factory_A.do_A();
};
return{
do_B: function(){
value_B++;
if(value_B > 0){
do_B_1();
}
return true;
}
}
});
错误:未定义Factory_B
场景3:
.factory('Factory_A', function(Factory_B){
var value_A = 1;
return{
do_A: function(){
if(value_A == 1){
value_A++;
Factory_B.do_B();
}
else{
return "Success"
}
}
}
})
.factory('Factory_B', function(){
var value_B = 0;
var do_B_1 = function(){
Factory_A.do_A();
};
return{
do_B: function(){
value_B++;
if(value_B > 0){
do_B_1();
}
return true;
}
}
});
错误:未定义Factory_A
以下是方案3的demo 显示了我如何使用工厂模拟项目流程。感谢。
答案 0 :(得分:1)
使用$injector
为自我或循环依赖注入依赖运行时。
在演示页面中更改js
angular.module('ionicApp', ['ionic'])
.controller('MyCtrl', function($scope, Factory_A) {
$scope.do = function(){
Factory_A.do_A();
};
})
.factory('Factory_A', function($injector){
var value_A = 1;
return{
do_A: function(){
if(value_A == 1){
value_A++;
var Factory_B = $injector.get('Factory_B');
Factory_B.do_B();
}
else{
return "Success"
}
}
}
})
.factory('Factory_B', function($injector){
var value_B = 0;
var do_B_1 = function(){
var Factory_A = $injector.get('Factory_A');
Factory_A.do_A();
};
return{
do_B: function(){
value_B++;
if(value_B > 0){
do_B_1();
}
return true;
}
}
});
答案 1 :(得分:1)
我假设您正在询问如何避免循环依赖。
在这种情况下,您可以注入$injector
。然后在调用每个工厂内的方法时,你会在第一次使用后注入它们或缓存它们。
.factory( 'FactoryA', function($injector){
return {
funcFoo: function(){
var fb = $injecto.get('FactoryB')
fb.funcBar()
}
}
})
.factory( 'FactoryB', function($injector){
return {
funcFoo: function(){
var fa = $injecto.get('FactoryA')
fa.funcFoo()
}
}
})