0

我正在使用以下 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',
])

然后,每个模块包括相关的控制器/指令/服务/任何东西。

例如 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)。

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

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

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

这就是它现在对我有用的方式:

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

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

但我不确定它是否完全正确。你能请教一下吗?

4

1 回答 1

0

您将 aservice与构造函数一起使用,而不是 a factory

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

  }

  LocalizeService.prototype = {
    publicFunction: function() {

    }
  };

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

  return LocalizeService;
}());

sharedModule.service('Localize', LocalizeService);
于 2014-02-20T08:03:01.713 回答