2014-06-04 65 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