AngularJS从文件夹加载控制器

时间:2013-09-06 00:46:51

标签: javascript angularjs

我是AngularJS中的新手,并且有问题我如何从结构化文件夹加载控制器和其他js?

例如我有结构:

app/
-common
-users
--userController.js
--userService.js
-orders
-app.js

我应该如何从文件夹用户加载控制器和服务?

还有一个小问题:squre支持的意思是什么?

app.config(['someThing'], function($routeProvider)

2 个答案:

答案 0 :(得分:7)

您可以将代码放在您想要的位置。如果将它们放入角度模块中,角度将会找到它。因此,如果您在/app/common/services/foo.js中提供服务,请执行以下操作:

angular.module('app').service('foo', function() { ... });

您可以在userController

中执行此操作
angular.module('app').controller('UserController', function($scope, foo) { ... });

在这里,您了解我如何在控制器中注入foo。 Angular Dependency Injection系统非常智能,无论您在何处放置代码,都可以找到您的代码。

您还可以创建与app不同的模块,您可以:

angular.module('other').service('bar', function() { ... });

您定义app模块的位置,如下所示:

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

你只需要在那里添加新模块作为依赖项,这就是[]的用途:

angular.module('app', ['other']);

现在您也可以在控制器中使用服务bar:)

另一方面,您所讨论的语法是数组表示法,如下所示:

angular.module('app').controller('FooCtrl', ['$scope', 'foo', function($scope, foo) { ... }]);

如果你在缩小代码时破坏代码,则需要这样做,因为在缩小的代码中,你可以得到这样的代码:

angular.module('app').controller('FooCtrl', ['$scope', 'foo', function(f, g) { ... }]);

如您所见,函数参数现在是fg,Angular根据这些名称不知道要注入什么,因此它会查看我们提供的字符串,因此它会知道f$scopegfoo

没有必要直接使用这个注释,有几个工具可以为你做ngmin

干杯。

编辑:您需要将每个javascript文件添加到<script>中,否则将无法加载,Angular将无法找到它。

逐个添加文件很痛苦,因为你可以有5个,或者你可以有200个。

最好连接它们,为此我建议:grunt-concat-sourcemap因为它会生成一个源图,因此您将拥有整个应用程序的1个文件,但在开发工具中,您将在单独的文件中看到它们。 / p>

我建议你查一下linemanjs,它是开发javascript应用程序的好工具,它可以为你汇总文件,源地图,缩小,数组表示法等等......

答案 1 :(得分:3)

您必须链接主HTML页面中的所有文件,并确保它们已加载。正如Dwight上面指出的那样。

另一种方法是使用像Grunt.js这样的东西来“构建”应用程序。这包括将所有controller.js文件合并为一个 - 然后将其加载到HTML页面中。这样,所有文件将分开进行开发,但会被调制以进行部署。