我开始使用Angular版本2并遇到@Component装饰器。我记得AngularJS(1.x)也有一个Decorator概念,它用于扩展/更改任何服务的默认实现。
似乎在Angular 2中,不是更改/扩展默认功能,而是将元数据添加到从Class(使用@Component)到属性(使用Input()/ Output()装饰器)的某些内容中,并且列表变为管道和服务等。
有人可以提供两者之间的差异(如果有的话) 概念/实际工作。
感谢。 迪帕克
答案 0 :(得分:1)
AngularJS装饰器是OOP pattern。
在AngularJS中很少使用它来扩展内置对象的行为。例如,以下implementation使用$provider.decorator()
来拦截$log.debug()
个调用,并动态地添加时间戳信息。
$provide.decorator('$log', [
"$delegate", function ($delegate) {
// Save the original $log.debug()
var debugFn = $delegate.debug;
$delegate.debug = function () {
var args = [].slice.call(arguments),
now = DateTime.formattedNow();
// Prepend timestamp
args[0] = supplant("{0} - {1}", [now, args[0]]);
// Call the original with the output prepended with formatted timestamp
debugFn.apply(null, args)
};
return $delegate;
}
]);
角度修饰符a language-feature表示:
提供了一种方便的声明性语法来修改类的形状 声明。此功能可用于各种目的 包括修改声明的成员的描述符 (@ nonconfigurable / @ enumerable),添加元数据(由Angular使用), 和更多。它允许附加访问
Angular使用它将元数据附加到类,类成员(属性)和方法参数。要了解Angular如何阅读Implementing custom component decorator in Angular。
在大于4的版本中,Angular将在运行时从动态评估装饰器开始,并将使用静态代码分析来提取装饰器描述符中指定的元数据。