繁体   English   中英

我是否需要为与我的角度应用程序相关的每个文件声明一个角度模块var?

[英]Do i have to declare an angular module var for each file related to my angular app?

我想写指令在directive.jscontroller.js写控制器,但我必须编写app = angular.module('app')以及有关在每个文件的应用程序的配置? 有写它们的简单方法吗?

不要简单回答“ yo angular”。 这使您不了解如何根据应用程序需求来设置自己的构建。

在目录结构方面,我使用以下内容:

应用程序目录结构

如果您还有其他要进入应用程序的内容,则可以将所有功能移至文件夹,即“模块”

在我如何启动我的模块代码以及该模块的关系控制器/指令等方面。 看起来类似于以下块:

文件:app / foo / foo.js

(function() {

    angular.module('foo', []);

})();

文件:app / foo / controllers / foo.fooController.js

(function() {

    function fooController() {
        // controller code
    }

    angular.module('foo').controller('fooController', fooController);

})();

文件:app / foo / directives / foo.fooDirective.js

(function() {

    function fooDirective() {
        // directive code
    }

    angular.module('foo').directive('fooDirective', fooDirective);

})();

您不必在全局范围内缓存模块,只需在每个文件中/每次需要时使用模块 angular.module('app')getter语法 angular.module('app') - :有了这个,你,不要将一个变量前污染全球范围内app ,以便能够在其他地方使用它。

controller.js:

//controller def
angular.module('app').controller('myCtrl', MyCtrl);

指令.js:

//directive def
angular.module('app').directive('myDir', MyDir);

只是不要在预期之外的其他地方通过执行angular.module('app',[])重新初始化模块。

我也为这个概念而苦恼。 归结为这个。

首先将AngularJS Module视为namespace声明,然后考虑以下内容。

给定一个名为“ foo”的应用程序名称空间,您可能有几个文件组成了您的应用程序,但您希望所有这些文件都只是扩展“ foo”名称空间。 AngularJS的模块功能有两个原型。 第一个带有两个参数,第二个只有一个。 在主模块文件中(我们称其为首先加载的文件),您将使用两个参数版本来初始化应用程序并定义希望Angular包括哪些外部模块。

下面的代码示例显示了两种格式的用法。 第一个显示了如何执行模块的初始声明。 注意第二个参数,它是一个字符串数组,用于标识模块所依赖的模块; 即使您没有依赖项,也必须提供空数组。

//main.js
(function(angular,undefined){
    "use strict";

    angular.module("foo", ["ui-router"]);
})(angular);

在示例的第二部分,您应注意没有第二个参数。 这基本上告诉Angular您已经在其他地方初始化了模块,现在您只是尝试添加到模块中。

//bar-controller.js
(function(angular,undefined){
    "use strict";

    angular.module("foo")
        .controller("bar", ["$scope", "$state", function($scope, $state){
             //Do controller stuff
        });
})(angular);

至于如何组织文件? 那取决于你。 对您和您的应用程序有意义的一切。 AngularJS确实不在乎文件系统的结构,除了模板的所有路径都是相对于“主要” js文件的。

据我了解,您需要知道的是您是否必须在每个将包含Angular代码的.js文件中声明一个应用程序变量...(问题的标题与内容不匹配)

简短答案:

说明

您可以通过这种方式声明一个角度应用

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

这样您就可以声明控制器,服务等。

myAppModule.controller('MyCTRL', ['dep1','dep2', function(dep1,dep2){
      //...
 }]);

或者您可以将其声明为模块而无需为其分配变量

angular.module('myAppModule', []); 

那么您必须像这样声明控制器,服务等

angular.module('myAppModule').controller('MyCTRL', ['dep1','dep2', function(dep1,dep2){
      //...
    }]);

现在,要完全回答您的问题,一旦声明了模块,就不必再次声明它,只需记住在包含de controller,指令,服务等

您还应该检查一下: 声明模块的“最佳”方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM