我是Angular.js
的新手,我读过控制器不应该污染全局命名空间。
它的真正含义是什么
以及为什么angular.module('SomeApp',[]).controller('SomeController', function($scope) {})
是添加控制器的最佳方式吗?
答案 0 :(得分:3)
编辑:污染全局命名空间不是特定于Angular,而是特定于Javascript(实际上是任何动态类型语言,其中变量可以在几乎任何范围内出现或重新声明)。
污染全局命名空间会使得不可用 - 实际上:将覆盖模块中的某些名称。
想象一下,我在'a.js'中有一个模块A,我声明:
mymodule = angular.module('A');
function Foo($s, $http){ ... };
foo = mymodule.controller('foo', ['$scope', Foo]);
还想象一下,我事先包含了一个名为'utils.js'的脚本:
foo = 3;
a.js中的 foo
将覆盖我的utils脚本中的foo
。这污染了全局命名空间,这就是为什么这是一个坏主意(也许我实际上需要foo var)。
想拥有这样的代码而不是链接电话吗?使用闭包:
/* a.js */
(function(){
var mymodule = angular.module('A');
function Foo($s, $http){ ... };
var foo = mymodule.controller('foo', ['$scope', Foo]);
})();
因此,您不会污染全局命名空间,因为每个声明都在匿名函数调用中。
答案 1 :(得分:2)
您使用的格式
angular.module('SomeApp',[]).controller('SomeController', function($scope) {})
不会污染全局命名空间。
然而,这种格式:
<强>的Javascript 强>
function UserController($scope) { ... }
<强> HTML 强>
<div ng-controller="UserController">
这是因为控制器功能在角度应用程序范围之外全局可用