"控制器污染全局命名空间“;它在Angular中意味着什么
"Controllers polluting the Global Namespace" what does it mean in Angular
我是Angular.js
的新手,我读到控制器不应该污染全局命名空间。
到底意味着什么
以及为什么angular.module('SomeApp',[]).controller('SomeController', function($scope) {})
添加控制器的最佳方式是什么?
编辑:污染全局命名空间不是Angular特有的,而是Javascript特有的(实际上是任何动态类型语言,其中变量几乎可以在任何范围内出现或重新声明)。
污染全局命名空间将使模块中的某些名称不可用——实际上:将覆盖。
想象一下,我在"a.js"中有一个模块a,我在其中声明:
mymodule = angular.module('A');
function Foo($s, $http){ ... };
foo = mymodule.controller('foo', ['$scope', Foo]);
想象一下,我事先包含了一个名为"utils.js"的脚本:
foo = 3;
.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]);
})();
因此,您不会污染全局命名空间,因为每个声明都在匿名函数调用中。
您使用的格式
angular.module('SomeApp',[]).controller('SomeController', function($scope) {})
不会污染全局命名空间。
然而,这种格式将:
Javascript
function UserController($scope) { ... }
HTML
<div ng-controller="UserController">
这是因为控制器功能在角度应用程序的范围之外是全局可用的
相关文章:
- Angular指令在alertify setContent内容中不起作用
- 如何获得Bootstrap Datepicker的年和月,因为它在变化
- OnsenUI、Angular和在警报对话框后刷新UI组件
- Angular 2:在本地.json文件上找不到文件
- 文本字段显示它是有效的,即使它在ExtJS中是无效的
- Angular JS在一行中查找最小值
- Angular$scope在模式窗口内不起作用
- 使用angular js在前端下载文件
- Jquery时间启动计时器,我有一个计时器的代码,但它在页面加载时启动
- 它在另一个函数中嵌套后不会输出文本
- 用angular js在屏幕上点击播放和暂停html5视频
- Angular:如何在状态更改时调用scope方法
- 如何递归地计算它在对象中出现的目标键(属性)的数量
- Angular Filter在指令表达式中不起作用
- ng-click事件在ionic中不起作用,但它在Angular中起作用
- 为什么Angular.js在ng更改时如此频繁地调用我的函数,以及如何使它每次更改只调用一次
- "控制器污染全局命名空间“;它在Angular中意味着什么
- 如何使用Angular来解决这个问题,它在JQuery中可以完美地工作
- Angular: ng-click参数是undefined,它在ng-repeat中
- 把click事件添加到元素中,而不是它在angular中的子元素