【问题标题】:what can or cannot be done with a controller created in a module Vs controller created globally?使用在模块中创建的控制器与全局创建的控制器可以做什么或不能做什么?
【发布时间】:2013-08-14 03:07:57
【问题描述】:

看过各种 Angular JS 示例,我得到的提示是我应该在模块上定义控制器而不是全局定义。

假设我有一个具有<body ng-app='mymodule'> 的应用程序 - 在主体内部它可以识别在 mymodule 中创建的控制器和全局创建的控制器。

  1. 模块上定义的控制器将无权访问任何全局 变量与全局控制器相比。对/错?
  2. 这里还有其他需要注意的要点吗?

【问题讨论】:

    标签: angularjs angularjs-controller


    【解决方案1】:

    与全局控制器相比,模块上定义的控制器将无法访问任何全局变量。是吗?

    错误。全局变量是全局的。您可以从控制器中访问它们,但您不应该这样做,除非测试不是您关心的问题——而且绝对应该关心。

    这里还有其他需要注意的要点吗?

    全局控制器不能使用来自其他模块的服务,而是来自 Angular 本身。如果您想使用在其他模块(指令、工厂、提供程序等)中定义的组件,您必须创建自己的模块并将它们声明为依赖项,以便您可以在任何需要它们的地方注入所需的位。

    全局控制器 IMO 的唯一用途是以简单易懂的方式演示 Angular。不要在生产中使用它。

    更新

    正如@dotnetcoder 在 cmets 中指出的那样,显然是由于 Angular 加载模块的方式,如果该模块已经被框架加载,全局控制器实际上可以从模块访问服务。我站得更正了。但是,虽然技术上可行,但我想不出任何人应该这样做的任何理由,我坚持我之前所说的:不要在生产中使用全局控制器。

    【讨论】:

    • 实际上(令我惊讶的是)似乎全局控制器可以从模块访问服务。我把这个访问工厂的 jsfiddle 示例放在全局控制器 jsfiddle.net/JrXeb
    • 我必须深入研究 Angular 源代码才能了解这里发生了什么。如果我做对了,Angular 首先加载ng-app 属性中定义的模块及其所有依赖项。然后它处理ng-controller 指令并尝试通过查看之前加载的所有服务来解决控制器依赖关系。如果它找到了执行控制器所需的一切,它就会去做。这是出乎意料的,至少对我来说。我想我应该停止阅读文档并开始学习 Angular 源代码。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多