javascript - 何时在 AngularJS 中使用 $injector

标签 javascript angularjs angularjs-injector

当我解析 AngularJS 文档时,我想我应该发布这篇文章以获得一些其他意见。

我的具体情况是,我希望使用模块的 run 方法更改可注入(inject)的设置。我有几种不同的方法可以获取注入(inject)剂,但不确定使用一种方法是否比另一种方法有明显的功能优势。或者它们本质上归结为同一件事。

例如,我的模块定义如下:

var app = angular.module('MyModule', ['some.Third.Party.Module']);

现在考虑第三方模块中有一个工厂需要设置变量。这可以通过执行以下操作来完成:

app.run(['some.Third.Party.Module.Factory', function (theFactory) {
    theFactory.someVariable = 'foo';
}]);

另一种方法是:

app.run(function ($injector) {
    var theFactory = $injector.get('some.Third.Party.Module.Factory');
    theFactory.someVariable = 'foo';
});

一种方法比另一种更好吗?也许还有第三种选择我还没有考虑过?

最佳答案

您实际上正在使用 Angular 提供的三种不同方法(据我所知)来注入(inject)依赖项。

Angular 可以仅通过函数参数的名称来识别依赖关系。当您注入(inject) $injector 时,您就是在此处执行此操作。

app.run(function ($injector) { ... });

上述内容对于开发来说既快速又简单,但在缩小代码时可能会遇到问题,因为变量名称可能会更改。

对于生产,通常开发中的一个好的做法是使用注释,就像您在 some.Third.Party.Module.Factory 的第二个代码示例中已经使用的那样。

app.run(['$injector', function ($injector) { ... }]);

我知道的第三种方法是直接使用$injector。 这对于单元测试很有用,并且如果您想有条件地切换注入(inject)的依赖项。 它提供动态注释而不是静态注释。

关于javascript - 何时在 AngularJS 中使用 $injector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29214881/

相关文章:

javascript - 将 json 参数作为变量传递给 .load()

php - Angularjs + Codeigniter 用户身份验证

javascript - 将数据传递给 Angular ui 模态(灯箱效果)

javascript - example.com 中的 setcookie(),在 www.example.com 中找不到 cookie

javascript - 使用/requestAnimationFrame 在滚动事件上更改 css

Javascript 点击特定于 ID

javascript - Angularjs 在指令中获取输出后将值分配给 Controller

angularjs - AngularJS [$ injector :unpr] Unknown provider

javascript - 捆绑和缩小导致 Angular 错误 : $injector:unpr unknown provider

AngularJS - 手动使用注入(inject)器注入(inject)服务时出错