在angular中,provider,怎么使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在angular中,provider,怎么使用相关的知识,希望对你有一定的参考价值。

参考技术A 我们要从Dependency Injection(依赖注入)的对象中获取的数据或者功能,都是Injector给的。

Injector会创建两种对象:服务 或 专用对象

Injector要知道如何创建这些对象,就要用户自行去“注册”。

有五种注册方法:

Provider, Value, Factory, Service 和 Constant

构建Service

最强大的是Providor,其他方法只不过是Provider在某些条件下的简化版。

构建specialized objects

specialized objects包括:

controllers, directives, filters 和 animations

一般用各自的API去创建,比如:
module.controller('AppleController', function ()
// some code
);
另外Provider也能够构建Filter(使得这个filter变得可配置):
// 用Provider构造filter
angular.module('Tommy', []).provider('matchMediaFilter', function ()
var service =
// 这里是可配置的数据
queries:
xs: 'screen and (max-width: 480px)',
sm: 'screen and (min-width: 481px) and (max-width: 768px)',
md: 'screen and (min-width: 769px) and (max-width: 992px)',
lg: 'screen and (min-width: 993px) and (max-width: 1200px)',
xl: 'screen and (min-width: 1201px)'
,
// 这个$get function是AngularJS规定必须的
$get: function (
$window
)
return function (unchanged, query, newVal)
var mq = service.queries[query];
return ($window.matchMedia && $window.matchMedia(mq).matches)
? newVal
: unchanged;
;

;
return service;
);本回答被提问者和网友采纳

为啥 Angular 允许您将 $provide 服务注入到配置块中?

【中文标题】为啥 Angular 允许您将 $provide 服务注入到配置块中?【英文标题】:Why does Angular let you inject the $provide service into config blocks?为什么 Angular 允许您将 $provide 服务注入到配置块中? 【发布时间】:2017-11-12 05:01:47 【问题描述】:

根据 Angular 文档,我们只能在配置块中注入提供者(而不是实例)。 https://docs.angularjs.org/guide/module#module-loading-dependencies

但与此相反,Angular 允许您注入 $provide$inject,尽管它们是单例服务实例。

https://docs.angularjs.org/api/auto/service/$provide

【问题讨论】:

了解什么是提供者:docs.angularjs.org/guide/providers(服务、工厂、提供者等)。 (此外,Angular 中的所有服务都是单例实例)。 @ippi,我认为提出问题的人已经阅读了文档。所以,如果不能回答,请不要让人们失去动力。 #StayAway 【参考方案1】:

这让我很好奇,所以我做了一些研究。这是我发现的:

    $injector 无法注入到配置块中 $provide 可以注入到配置块中

在代码中,2的原因是$provideproviderInjector(配置块中使用的注入器)创建之前被放入providerCache。这确保它始终是providerInjector 的已知提供者。 https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L671

也就是说,我同意能够将$provide 注入配置块似乎与此处所述的关于可以注入配置块的一般规则相矛盾:https://docs.angularjs.org/guide/module#module-loading-dependencies

即使它被清楚地证明是你可以在这里做的事情: https://docs.angularjs.org/guide/module#configuration-blocks

$provide 可能只是一般规则的一个例外。

【讨论】:

以上是关于在angular中,provider,怎么使用的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 2 Provider

在ANGULAR的SERVICE中,哪种才是最基本的实现?(Provider)

为啥 Angular 允许您将 $provide 服务注入到配置块中?

When using SqlDependency without providing an options value, SqlDependency.Start() must be called pr

在 Angular 6 中,我在组件中收到错误“NullInjectorError: No provider for Store”

Angular2 No provider for AngularFireDatabase injection error