AngularJS - module()。provider()vs $ provide.provider()

时间:2014-02-07 17:32:24

标签: javascript angularjs

注意:我不是在寻找价值,工厂,服务和提供商'食谱'之间的差异,as explained here.

我正在寻找有关定义它们的不同方法的说明:如果我错了,请纠正我,但看起来好像

myApp = angular.module('myApp', [])
    .value(...)
    .factory(...)
    .service(...)
    .provider(...)

映射到

$provide.value()
$provide.factory()
$provide.service()
$provide.provider()

你可以使用任何一种方式。我问this question,并意识到我可以使用$provide作为module().config()的依赖项。我的问题:

  1. 何时/为什么我会使用angular.module()。provider()vs使用$provide依赖?
  2. 定义后是否有任何方式(或理由)访问/更改提供商?
  3. 使用AngularJS Batarang for Chrome,我正在查看各种角度$scope属性,但看不到$provide$injector。这些住在哪里?

1 个答案:

答案 0 :(得分:1)

  1. 模块定义的提供者方法只是捷径。您可以随意使用它们,因为它可以缩短,更易于阅读和理解代码。与注入$ provider服务并直接调用相比,更少涉及仪式/仪式。直接使用$ provide的主要原因是访问一个不是模块的快捷方法(例如装饰器),或者你必须在服务或组件中做一些不在模块定义中的东西水平。

  2. 在定义之后更改提供程序的常见情况是,当您要集成第三方组件并想要添加或更改行为时。第三方模块将定义服务,然后您以某种特定于您的应用的方式介入并覆盖或扩展它。例如,常见的情况是采用内置的Angular异常处理程序并将其扩展为与您自己的组件接口。

  3. $ scope是用于数据绑定的特殊“粘合剂”,仅公开您在$ scope上显式设置的属性/函数。所有其他杂项模块/服务都存储在Angular的依赖注入容器中。 Angular做的第一件事就是创建一个$ injector实例来跟踪依赖关系。因此$ injector === $ injector.get('$ injector')。与$ provide相同。任何以$为前缀的东西都是按照惯例,Angular在$ injector中放置的服务供您使用。