为什么一般不推荐使用$ controllerProvider.allowGlobals()?

时间:2015-03-30 12:02:56

标签: angularjs

当从Angular 1.2迁移到1.3时,通常建议所有控制器都放在一个模块内(否则它们会中断),即使在模块的配置中添加一行也可以实现同样的目的:

angular.module('app').config(['$controllerProvider',function($controllerProvider) {
  $controllerProvider.allowGlobals();
}]);

但不建议这样做,因为它可能会影响未来。

为什么不建议使用后一种方法?

2 个答案:

答案 0 :(得分:2)

这是为了避免不必要地污染全局命名空间,并降低其他代码(例如某些非Angular插件)可能会干扰您的代码的风险。

假设您在全局范围内拥有控制器MyController。该页面中的其他一些Javascript可以设置类似

的内容
window.MyController = window.alert;

(取决于代码运行的时间)可以破坏你的Angular应用程序。

答案 1 :(得分:0)

当您使用全局函数作为控制器时,您的函数将污染全局命名空间。可能会有更多机会与其他图书馆发生冲突。

这就是角度1.3的原因,建议将模块内的控制器分组。通过这种方式,您不会污染全局命名空间,也无法组织代码,它也是模块化的。因此,它有助于我们在全局命名空间中占用最少的空间。