【问题标题】:AngularJS name collision in Dependency Injection?依赖注入中的AngularJS名称冲突?
【发布时间】:2014-04-07 19:27:36
【问题描述】:

假设我有两个模块(finance2、finance3),每个模块都定义了一个同名的服务(currencyConverter)。

如果我告诉我的主模块它只依赖于金融2,我可以像这样注入服务:

angular.module('invoice2', ['finance2'])
  .controller('InvoiceController', ['currencyConverter', function(currencyConverter) {

但是,如果我希望我的 invoice2 依赖于这两个模块,将注入哪个 currencyConverter?来自finance2 的那个还是来自finance3 的那个?我可以控制我自己的模块,但我担心的是你是否依赖于其他定义同名工厂的模块。角度如何处理?

angular.module('invoice2', ['finance2','finance3'])
  .controller('InvoiceController', ['currencyConverter', function(currencyConverter) {

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    最后加载/处理的将获胜。

    如果您的脚本是:

    • finance2(使用 currencyConverter)
    • finance3(使用 currencyConverter)

    那么当currencyConverter的依赖被解决后,你就会得到finance3的currencyConverter。

    如果您的脚本是:

    • finance3(使用 currencyConverter)
    • finance2(使用 currencyConverter)

    那么当currencyConverter的依赖解决后,你就会得到finance2的currencyConverter。

    【讨论】:

    • 哇,这很有趣。如果您正在加载外部模块并且无法控制命名怎么办??
    • 我相信这是 Angular 当前 DI 框架的一个已知缺点,他们也意识到了这一点,这也是他们在版本 2 中以不同方式实现 DI 的部分原因。
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    相关资源
    最近更新 更多