AngularJS(1.x)和Angular(2/4)装饰器之间的区别

时间:2017-09-06 06:06:46

标签: angularjs angular angular2-decorators

我开始使用Angular版本2并遇到@Component装饰器。我记得AngularJS(1.x)也有一个Decorator概念,它用于扩展/更改任何服务的默认实现。

似乎在Angular 2中,不是更改/扩展默认功能,而是将元数据添加到从Class(使用@Component)到属性(使用Input()/ Output()装饰器)的某些内容中,并且列表变为管道和服务等。

有人可以提供两者之间的差异(如果有的话) 概念/实际工作。

感谢。 迪帕克

1 个答案:

答案 0 :(得分:1)

AngularJS

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将在运行时从动态评估装饰器开始,并将使用静态代码分析来提取装饰器描述符中指定的元数据。