【问题标题】:AngularJS Annotation QuestionsAngularJS注解问题
【发布时间】:2015-08-06 16:18:46
【问题描述】:

您好,总的来说,我是 Angular 和 JS 框架的新手。我想知道是否有人可以帮助我破译一些符号。

来自文档: https://docs.angularjs.org/guide/di

内联数组注解

someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) {
  // ...
}]);

$inject 属性注解

var MyController = function($scope, greeter) {
  // ...
}

MyController.$inject = ['$scope', 'greeter'];

someModule.controller('MyController', MyController);

对于我的教育,$inject 方法是首选,因为它更爆炸。我看到三个步骤:1)定义函数,2)注入依赖项,3)附加到父模块。

好的,我的问题: 为什么将“$scope”和“greeter”列为函数的参数,然后用$inject 注入?不会是其中之一吧?

someModule.controller('MyController', MyController);

为什么 MyController 作为文字列出了两次?这是一种类型和象征性的东西吗?是不是也很容易:

someModule.controller('MyInstanceOfMyController', MyController);

感谢您的任何启发

【问题讨论】:

    标签: angularjs dependency-injection


    【解决方案1】:

    对于我的教育,$inject 方法是首选,因为它更爆炸。我看到三个步骤:1)定义函数,2)注入 依赖关系,3) 附加到父模块。

    我也喜欢这个符号,它读起来更好。

    好吧,我的问题:为什么“$scope”和“greeter”被列为 函数的参数,然后注入 $inject? 不会是其中之一吧?

    这是有道理的,你告诉注入器要注入什么,函数声明将这些作为可用参数。

    您可以在注入器中将“greeter2”更改为“newGreeter”,并且无需更新函数代码即可使用新模块。

    someModule.controller('MyController', MyController);

    为什么 MyController 作为文字列出了两次?这是一种类型吗? 令牌的东西?是不是也很容易:

    someModule.controller('MyInstanceOfMyController', MyController);

    有点,在这里你是在告诉模块 1)控制器叫什么 2) 哪个函数定义了控制器

    这些可以有相同的名字,但它们不是必须的。

    【讨论】:

    • 谢谢。我理解你所有的答案:) 关于最后一点“1)控制器被称为什么”。说“这就是我想在“someModule”中调用控制器是否正确?
    • “这是有道理的,你告诉注入器注入什么,函数声明将这些作为可用参数”虽然我理解你的意思,但我不确定这对我来说是否有意义.将某些东西作为参数传递给函数使其在该函数中可用....那么 wtf 是否“注入”呢?为什么两者都有?如果“注入”就像引用一个库,为什么它也必须是一个参数?
    • 您的第一条评论 - 是的,这就是在 someModule 中引用它的名称。
    • 您的第二条评论-如果您只是将库作为函数中的参数,那么角度如何知道这些库实际上是什么?注入器通过不将库引用硬编码到控制器中(即依赖注入点)使代码可测试,从而使依赖关系易于交换以进行测试或替换。
    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 2014-06-08
    • 2018-10-27
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多