AngularJS多次定义angular.module()

Mar*_*itt 29 javascript angularjs

angular.module('myModule')多次呼叫的行为是什么?

例如,我希望在单独的.js文件中定义我的路由和我的指令.

这样安全吗?

例如:

//routes.js
angular.module('app',['$strap'])
   .config(function($routeProvider, $locationProvider) {
     ...
   });

//directives.js
angular.module('app')
    .directive('formInput', function() {
...
Run Code Online (Sandbox Code Playgroud)

此外,多次定义依赖项的影响是什么?这是添加剂还是最后一次胜利?

例如:

Mar*_*cok 34

angular.module(name [,requires],configFn);
...
requires(可选) - {Array.=} - 如果指定,则创建新模块.如果未指定,则检索模块以进行进一步配置.- angular.module docs

我会解释如下:您只能定义一次依赖项 - 第一次为特定模块调用angular.module.之后可以多次调用angular.module(),但requires不能指定该选项.

  • 只是为了解释一下,angular.module('app',['$ strap'])可以作为一个setter.这将注册一个带有角度的模块并定义其依赖关系.angular.module('app')用作getter,它将使用以前注册的模块,并允许您使用控制器和指令等添加它. (11认同)
  • 更多细节 - 如果您在模块上调用.config()方法,请确保省略[requires]数组,这样,配置块将添加到所有先前的配置.如果保留,配置块将覆盖这些配置. (5认同)

Jam*_*ruk 15

您应该只创建一次模块.根据文档,如果您创建一个名称已存在的模块,它将覆盖前一个模块.(所以最后胜利.)

angular.module('app', []);
Run Code Online (Sandbox Code Playgroud)

您可以根据需要多次检索模块,也可以根据需要在单独的文件中检索模块.您通常会多次检索模块以声明服务,控制器,指令等.

angular.module('app').service('myService', ...);
angular.module('app').controller('myController', ...);
angular.module('app').directive('myDirective', ...);
Run Code Online (Sandbox Code Playgroud)

关于模块AngularJS文档中,请参阅" 创建与检索 "一节.


dsl*_*dsl 5

我是angular的新手,但这是我的理解:你在每个文件中创建一个带有命名空间模块名称的模块,在主模块中你需要这些模块.

// in main app.js file
var app = angular.module('myapp', 
          ['myapp.routers', 'myapp.directives', 'myapp.filters']);

// in filters.js
angular.module('myapp.filters', []).filter(....)

// in routers.js
angular.module('myapp.routers', []).router(....)

// in directives.js
angular.module('myapp.directives', []).directive(....)
Run Code Online (Sandbox Code Playgroud)

  • 即使种子项目以这种方式执行,模块也不必包含在单个文件中.我有一个项目设置,我在app.js文件中声明所有模块,然后在每个文件之外声明一个控制器/指令/服务,并且工作正常. (3认同)
  • 我会避免使用这种类型的架构,因为模块化您的应用程序几乎变得毫无用处。我相信模块化的预期目标是隔离应用程序中的组件,仅在需要时才实例化它。我知道它的题外话,但我只是想分享我对此的想法。维护模块和依赖注入很快就会变得一团糟,所以在创建多个模块时要小心。 (2认同)