2015-09-02 50 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需要应用程序中的助手,这将成为循环依赖。

如果你有辅助方法,它们应该没有来自应用程序的其他依赖项,尽管如果它们依赖于外部方法就没有问题。

这样,依赖于这些助手的任何模块都可以指定依赖项,而没有循环依赖的风险。