【问题标题】:Confusion about the conventions for $provide in angularjs关于 angularjs 中 $provide 的约定的困惑
【发布时间】:2014-07-06 06:01:50
【问题描述】:

我正在尝试了解 angularjs 中的依赖注入。让我感到困惑的一件事是$provide 对象,这可能只是命名约定的一个例外。

  1. angularjs api documentation 中,它被列为auto 模块的service,即它应该可以注入到其他服务中,但实际上它是一个provider,即只能注入到模块的@987654327 中@块。
  2. As seen here$provide(默认情况下)存储在 providerCache 中,这是有道理的,因为它是提供者。但是,它不使用标准命名约定;所有提供者都有后缀Provider。也就是说,它应该被命名为$provideProvider

这只是文档的约定和providers 命名约定的例外吗?还是这里发生了其他事情?

【问题讨论】:

    标签: javascript angularjs dependency-injection


    【解决方案1】:

    您可以将$provide 服务视为可以在模块的.config 部分注入的服务。

    module.provider('providerName', function() { ... });
    module.service('serviceName', function() { ... });
    module.factory('factoryName', function() { ... });
    
    // Is the same as:
    
    module.config(['$provide', function($provide) {
        $provide.provider('providerName', function() { ... });
    });
    module.config(['$provide', function($provide) {
        $provide.service('serviceName', function() { ... });
    });
    module.config(['$provide', function($provide) {
        $provide.factory('factoryName', function() { ... });
    });
    

    为了回答你的问题:
    1. 从源码来看,$provide 似乎不是典型的提供者,因为它没有注册为典型的提供者。然而,这是有道理的,因为$provide 用于注册其他提供者。
    2. 我没有任何依据,但我假设这个命名约定的例外是这个规则的一个例外。 $provide 服务与任何其他提供程序都不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-17
      • 2020-03-06
      • 2016-03-16
      • 2013-07-27
      相关资源
      最近更新 更多