简而言之,装饰器可以描述如下:-
装饰器函数拦截服务的创建,允许它覆盖或修改服务的行为。
它$provide
通过角度使用服务并修改或替换另一个服务的实现
$provide.decorator('service to decorate',['$delegate', function($delegate) {
// $delegate - The original service instance,
// which can be replaced, monkey patched,
// configured, decorated or delegated to.
// ie here what is there in the 'service to decorate'
// This function will be invoked,
// when the service needs to be provided
// and should return the decorated service instance.
return $delegate;
}]);
例子:
$provide.decorator('$log', ['$delegate', function($delegate) {
// This will change implementation of log.war to log.error
$delegate.warn = $delegate.error;
return $delegate;
}]);
应用
除了@JBland 答案。
应用程序范围的区域设置:-
你可以在这里找到一个例子
通过角度服务更改服务的默认行为和现有实现:-
你可以在这里找到一个例子
一个函数在不同环境中的切换行为。