2014-06-04 45 views
1

在我的控制器中,我调用一个需要递归调用自身的工厂函数。代码工作时,他们只是简单的JavaScript函数没有在工厂内定义,但我试图隔离他们好一点。Angular在同一工厂调用工厂函数

这是一个代码片段看起来像控制器:

myApp.controller('VisionCtrl', ['$scope', 'AppFactory', function ($scope, AppFactory,) { 
    var promiseTaxo; 
    promiseTaxo = AppFactory.getTaxonomy("vision3", "Vision Type"); 
}]) 

,工厂模块:

myApp.factory('AppFactory', ['$http', '$q', function($http, $q, TaxoFactory) { 
    return { 
     getTaxonomy: function(group, termSet) { 
      ... lots of code .... 
      if (termSet.length > 0) { getTaxonomy(group, childTermSet) } 
     } 
    } 
}]) 

这是超级简单,但这个想法是,在getTaxonomy函数,如果我找到了子节点,我递归地调用我自己。在处理处理和承诺的异步性质的地方,还有很多事情要做,但是当我将这些代码放在工厂之外时,它就可以正常工作。

我只是不知道如何在getTaxonomy中调用getTaxonomy!

+0

'getTaxonomy'没有定义,尝试'this.getTaxonomy'。或者先定义对象,然后在末尾使用'obj.getTaxonomy'和'return obj'。或者给你的函数一个名字用于递归。 – elclanrs

回答

5

您可以拨打this.getTaxonomy()作为@elclanrs提及或更改你的工厂了一点,所以你可以从里面调用它:

myApp.factory('AppFactory', ['$http', '$q', function($http, $q, TaxoFactory) { 

    var AppFactory = { 
     getTaxonomy: function(group, termSet) { 
      ... lots of code .... 
      if (termSet.length > 0) { AppFactory.getTaxonomy(group, childTermSet) } 
     } 
    } 

    return AppFactory; 
}]); 
+0

定义包含所有函数的内部对象做了诀窍 - 谢谢,请注意this.getTaxonomy()不起作用 - 未定义,我不明白为什么,可能与注入器的工作方式有关。 – pierrebo