2

我想要一個名爲FeatureRegistry的服務,並且所有功能都在註冊。註冊功能依賴於FeatureRegistry(反之亦然)。許多服務在另一個服務中註冊,這些服務對它們沒有依賴性? (懶惰加載)

我做到了,現在是:

angular.module('app').factory('FeatureRegistry', function(){ 
    var FeatureRegistry = new Object(); 
    FeatureRegistry.features = new Array(); 
    FeatureRegistry.registerFeature = function(feature){ 
    FeatureRegistry.features.push(feature); 
    } 
    return FeatureRegistry; 
} 

angular.module('app').factory('Feature', function(FeatureRegistry){ 
    var Feature = new Object(); 
    FeatureRegistry.registerFeature(Feature); 
    return Feature; 
} 

但功能似乎從來沒有登記。 如果我在FeatureRegistry中查找功能。

我有FeatureController測試它:

angular.module('app').controller('FeatureController', 
    function($scope, FeatureRegistry){ 
    $scope.features = FeatureRegistry.features; 
    return this; // not sure if a return is necessary 
} 

編輯:
所以,現在我知道,服務是延遲加載,只有他們被注射時實例化。但是,這與我想要實現的應用程序相反,因爲這些功能應該存在於單獨的文件和文件夾中,並且我不想在添加新功能時隨時更改FeatureRegistry的依賴關係。


編輯2:

現在,我做了一個圖表,顯示結構應該是什麼樣子: enter image description here

+0

你'FeatureRegistry'工廠需要返回對象'FeatureRegistry'。 – 2013-03-20 17:57:16

+0

ups,是的,忘了鍵入...但這不是錯誤^^ – JustGoscha 2013-03-20 18:00:25

回答

0

你需要的地方注入Feature,否則也不會被實例化。例如,

app.controller('MainCtrl', function($scope, FeatureRegistry, Feature) { 

Plunker

+0

是否有一個函數來實例化它而不注入它的地方? – JustGoscha 2013-03-20 19:25:56

+0

因爲我想在自己的文件中實現許多'特性',並且不希望總是在本例中爲MainCtrl添加另一個注入,而是在文件中完成實例化它。 我使用require.js加載所有模塊...並且不想在每次實現並添加另一個特性時觸及FeatureRegistry的依賴項。 – JustGoscha 2013-03-20 19:38:02

+0

你可以使用'$ injector'。例如,'app.controller('MainCtrl',function($ scope,FeatureRegistry,$ injector){$ injector.get('Feature')'。我不確定如果你加載你的'Feature'稍後服務。 – 2013-03-20 19:41:33

相關問題