这一节我们来讲讲AngularJS中的依赖注入,在实际开发中Angular提供了具体的方法供我们去调用,但是一旦业务不能满足要求或者出现麻烦或者错误时导致无从下手,所以基于此我们有必要深入一点去了解内部的基本原理,这样我们才能将Angular玩弄于鼓掌之间。
在讲述依赖注入时我们有必要讲一讲一个组件decorator(暂且叫做装饰者)。它也是创建服务的一个例子。decorator是一种设计模式,它能隔离修改及在不修改源码的前提下进行修改。在Angular中,它能够在服务、指令、过滤器使用之前被修改。
我们应该如何去使用使用装饰者,我们有两种方法来注册装饰者 $provide.decorator 和 module.decorator 这两种都有一个 $delegate ,这个被用来初始化服务、过滤器、指令。我们主要介绍第一种注册装饰者的方法
我们看看在Angular中日志服务是怎么来的。
angular.module('myApp', [])
.config([ '$provide', function($provide) {
$provide.decorator('$log', [
'$delegate',
function $logDecorator($delegate) {
var originalWarn = $delegate.warn;
$delegate.warn = function decoratedWarn(msg) {
msg = 'Decorated Warn: ' + msg;
originalWarn.apply($delegate, arguments);
};
return $delegate;
}
]);
}]);
一旦日志服务被初始化后,装饰者(decorator)就会被触发,decorator函数有一个注入到访问在装饰者中匹配所选择的服务的
通过
| Name | Descriptions |
| constant(name, value) | 定义一个constant值 |
| decorator(name, service) | 定义一个服务decorator |
| factory(name, service) | 定义一个服务 |
| provider(name, service) | 定义一个服务 |
| service(name, provider) | 定义一个服务 |
| value(name, value) | 定义一个值服务 |
如上除了decorator未被暴露在angular.module中,原因猜想大概是:由于是最原始的初始化服务的方法,所以在大部分情况下我们都不会用到,除非在特定情况下要进行某一目的的特定修改我们才需要,所以未进行显式的暴露。在这里我们有必要来演示下。我们在Angular原始日志服务基础上添加一点信息来进行打印。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3566/viewspace-2808797/ ,如需转载,请注明出处,否则将追究法律责任。