我是AngularJS中的新手,并且有问题我如何从结构化文件夹加载控制器和其他js?
例如我有结构:
app/
-common
-users
--userController.js
--userService.js
-orders
-app.js
我应该如何从文件夹用户加载控制器和服务?
还有一个小问题:squre支持的意思是什么?
app.config(['someThing'], function($routeProvider)
答案 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) { ... }]);
如您所见,函数参数现在是f
和g
,Angular根据这些名称不知道要注入什么,因此它会查看我们提供的字符串,因此它会知道f
为$scope
且g
为foo
。
没有必要直接使用这个注释,有几个工具可以为你做ngmin。
干杯。
编辑:您需要将每个javascript文件添加到<script>
中,否则将无法加载,Angular将无法找到它。
逐个添加文件很痛苦,因为你可以有5个,或者你可以有200个。
最好连接它们,为此我建议:grunt-concat-sourcemap
因为它会生成一个源图,因此您将拥有整个应用程序的1个文件,但在开发工具中,您将在单独的文件中看到它们。 / p>
我建议你查一下linemanjs,它是开发javascript应用程序的好工具,它可以为你汇总文件,源地图,缩小,数组表示法等等......
答案 1 :(得分:3)
您必须链接主HTML页面中的所有文件,并确保它们已加载。正如Dwight上面指出的那样。
另一种方法是使用像Grunt.js这样的东西来“构建”应用程序。这包括将所有controller.js文件合并为一个 - 然后将其加载到HTML页面中。这样,所有文件将分开进行开发,但会被调制以进行部署。