2015-09-02 76 views
0

我有一個父模塊設置像這樣:如何將工廠從父模塊共享到子模塊?

var app = angular.module("App", ["App.ClsEditor", "App.ClsNotes"]); 

app.factory("Helpers", function($sce) { 
    var factory = {}; 

    factory.createHtmlFromMarkdown = function(givenMarkdown) { 
     var escapedHtml = $sce.trustAsHtml(marked(givenMarkdown)); 

     return escapedHtml; 
    } 

    return factory; 
}); 

我有一個子模塊還定義,像這樣:

var ClsNotesApp = angular.module("App.ClsNotes", ["ngRoute"]); 

ClsNotesApp.controller("NotesCtrl", function($scope, $http, $routeParams, Helpers) { 
    $http.get("https://raw.githubusercontent.com/arun-curriculum/Advanced-JavaScript-Two-Day/master/day_1/README.md") 
     .then(function(data) { 
      var markdown = data.data; 

      $scope.output_html = Helpers.createHtmlFromMarkdown(markdown); 
      Helpers.highlightMarkdown(); 
     }); 
}); 

這將是有意義的我,「助手」廠會立即被由子模塊訪問(App.ClsNotes)。我得到一個錯誤,而不是:

未知提供商:HelpersProvider < - 助手< - NotesCtrl

任何想法?

+0

你應該可以像這樣訪問它,它適用於我。 – Chrillewoodz

+0

是否有理由以App開頭命名您的子模塊? – Chrillewoodz

+0

我剛剛開始使用Angular,但我這樣做的原因是要將App模塊繼承到子模塊中。 – Arun

回答

0

我建議你創建一個單獨的模塊angular像這裏你可以說這爲App.Utils,可以有多個組件在它像factoryservicefilter S等通過製造一個新的模塊會更容易將它注入模塊&中的任何一個代碼分離規則之後也可以這樣做。

代碼

var utils = angular.module("App.Utils", ["ngSanitize"]); 
utils.factory("Helpers", function($sce) { 
    var factory = {}; 

    factory.createHtmlFromMarkdown = function(givenMarkdown) { 
     var escapedHtml = $sce.trustAsHtml(marked(givenMarkdown)); 

     return escapedHtml; 
    } 

    return factory; 
}); 

然後controller模塊將包括App.Utils

var ClsNotesApp = angular.module("App.ClsNotes", ["ngRoute", "App.Utils"]); 
+0

@阿倫它對你有幫助嗎? –

0

你需要你的應用程序模塊中的App.ClsNotes模塊。如果App.ClsNotes需要應用程序中的助手,這將成爲循環依賴。

如果你有輔助方法,它們應該沒有來自應用程序的其他依賴項,儘管如果它們依賴於外部方法就沒有問題。

這樣,依賴於這些助手的任何模塊都可以指定依賴項,而沒有循環依賴的風險。