看过各种 Angular JS 示例,我得到提示,我应该在模块上定义控制器而不是全局定义。
假设我有一个应用程序,它<body ng-app='mymodule'>
在主体内部可以识别在 mymodule 中创建的控制器和全局创建的控制器。
- 与全局控制器相比,模块上定义的控制器将无法访问任何全局变量。真假 ?
- 这里还有其他需要注意的要点吗?
看过各种 Angular JS 示例,我得到提示,我应该在模块上定义控制器而不是全局定义。
假设我有一个应用程序,它<body ng-app='mymodule'>
在主体内部可以识别在 mymodule 中创建的控制器和全局创建的控制器。
与全局控制器相比,模块上定义的控制器将无法访问任何全局变量。真的 ?
错误的。全局变量是全局的。您可以从控制器中访问它们,但您不应该这样做,除非测试不是您关心的问题——而且绝对应该关心。
这里还有其他需要注意的要点吗?
全局控制器不能使用其他模块的服务,只能使用 Angular 本身的服务。如果您想使用在其他模块(指令、工厂、提供程序等)中定义的组件,您必须创建自己的模块并将它们声明为依赖项,以便您可以在任何需要它们的地方注入所需的位。
全局控制器 IMO 的唯一用途是以简单易懂的方式演示 Angular。不要在生产中使用它。
更新
正如@dotnetcoder 在评论中指出的那样,显然是由于 Angular 加载模块的方式,如果该模块已经被框架加载,全局控制器实际上可以从模块访问服务。我站得更正了。但是,尽管在技术上是可行的,但我想不出任何人应该这样做的任何理由,我坚持我之前所说的:不要在生产中使用全局控制器。