我查看了一些angularJS教程和样式指南,并找到了这样的评论(from Todd Motto)
Bad:
var app = angular.module('app', []);
app.controller();
app.factory();
Good:
angular
.module('app', [])
.controller()
.factory();
我第一次学会了" Bad"通过示例的技术,并已经看到一些参考(除了这一个)说"坏"技术是......好坏。
我的搜索到目前为止还没有人说为什么这么糟糕?
修改 为什么这个问题有所不同? 虽然这与提出的重复问题之间的差异很微妙,但有两个重要的区别:
'最佳做法是什么?'与“为什么不好?”不一样?' ...虽然对另一个问题的接受答案详细阐述了“为什么”,但这两个问题具有相同的答案是不够的被标记为副本。
使用我作为此问题标题的确切文本进行了有力的搜索,但没有透露建议的副本。也许SE应该考虑允许"可选的标题"被添加到一个问题以增强搜索能力......但是这个功能还没有到位,而其他人问我同样的问题仍然没有找到另一个问题。
答案 0 :(得分:9)
全局变量通常被认为是不好的做法,虽然angular
本身就是一个全局变量,所以我认为只要你是一致的,它就不会 大部分交易
如果你不小心做了这样的事情,可能会出现问题:
app = angular.module("app");
// some other file
app = somethingNotAnAngularModule();
外部库可能会覆盖变量app
等等。
您也可以使用特定于您的应用的名称,而不是使用名称app
...
dustrModule = angular.module("dustr", []);
链接是一回事,但如果您将组件拆分为单独的文件,您始终可以获取模块.module
// app.js
angular.module("app", []);
// LoginCtrl.js
angular.module("app").controller("LoginCtrl", LoginCtrl);
答案 1 :(得分:3)
不使用var module = angular.module('foo', []);
然后使用变量的全部意义纯粹是自以为是。做这个IMO没什么不好的,特别是如果你把它与browserify结合起来并做到这一点:
富/ FooModule.js:
var ng = require('angular');
module.exports = ng.module('Foo', []);
富/ FooController.js:
var FooModule = require('foo/FooModule');
function FooController() {
this.bar = 'bar';
}
FooModule.controller('FooController', FooController);
module.exports = FooController;
富/ FooRoutes.js:
var Router = require('base/Router');
var FooController = require('foo/FooController');
function initialize() {
Router.route('/foo', 'FooController as foo');
}
module.exports = initialize;
main.js:
var FooRoutes = require('foo/FooRoutes');
FooRoutes();
嗯,比这更重要的是在定义控制器和工厂时不要使用匿名函数。
所以你
function MyCtrl($dep1) { ... }
function MyFactory() { ...}
然后
angular.module()
.controller('my', ['$dep1', MyCtrl])
.factory('fac', MyFactory);
通过这种方式,您可以将实际代码与Angular依赖注入和声明分开,并将所有AngularJS内容保存在一个位置。
有些人告诉你第一种方法不好的原因是因为你正在分散" Angular的东西"到处都是,必须扫描整个代码才能找到实际的东西"。
还尝试使用立即调用的函数表达式(IIFE)来封装所有这些代码:
(function(){ /* code */ }());