与angularjs一起使用的正确模式

时间:2014-02-20 07:52:09

标签: javascript angularjs design-patterns revealing-module-pattern

我正在使用以下angularjs项目结构:

index.html
js/
-- angularjs
-- application.js
-- shared
-----SharedModule.js
-----LocalizeService.js
-----OtherSharedService.js
-- user
-----UserModule.js
-----LoginController.js
-----RegisterController.js
-----UserService.js

换句话说,我不按类型(例如服务/控制器/指令)对文件进行分组,而是按其逻辑目的(例如用户/共享/购物车等)进行分组。我读到这是大型项目的正确方法。

主application.js文件包含如下模块:

angular.module('myApplication', [
    'ngRoute',
    'ngCookies',
    'sharedModule', 
    'userModule',
    'dahsboardModule',
])

然后,每个模块都包含相关的控制器/指令/服务/其他。

e.g。 SharedModule.js

var sharedModule = angular.module('sharedModule',[]);

sharedModule.factory('Localize', ['$http', '$rootScope', '$window', LocalizeService]);

sharedModule.controller('someController',['$rootScope',SomeController]);

然后我在每个单独的文件中实现逻辑。 我的问题是:我应该使用什么设计模式来实现每个单独服务/控制器的逻辑?

我读过这本书:http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/ 到目前为止,我心爱的设计模式是“揭示模块模式”,这是一种全方位的设计模式。我在其他项目中使用了很多次(没有角度)。

但似乎我不能将它与angularjs一起使用。

var LocalizeService = (function() {
})();

如何将$ rootScope / $ http等所有内容传递给模块?

这就是我现在的工作方式:

function LocalizeService($http,$rootScope,$window) {
   var localize = (function() {

      function publicFunction() {
            // do smth.
        }
      return {
          someFunction: publicFunction
      }
   })();
   return localize;
}

但我不确定它是否完全正确。请你帮忙吗?

1 个答案:

答案 0 :(得分:0)

您使用带有构造函数的service而不是factory

var LocalizeService = (function() {
  function LocalizeService($http, $rootScope, $window) {

  }

  LocalizeService.prototype = {
    publicFunction: function() {

    }
  };

  LocalizeService.$inject = ['$http','$rootScope','$window'];

  return LocalizeService;
}());

sharedModule.service('Localize', LocalizeService);