Разница между AngularJS(1.x) и Angular (2/4) Декоратором

Я начинаю с Angular версии 2 и наткнулся на @Component Decorator. Я мог бы напомнить, что AngularJS(1.x) также имел концепцию Decorator, в которой он использовался для расширения / изменения реализации по умолчанию любого сервиса.

Похоже, что в Angular 2 вместо того, чтобы изменять / расширять функциональность по умолчанию, они добавляют метаданные к чему-то, начиная от Class(используя @Component) до свойства (используя декораторы Input()/Output()), и этот список можно продолжить для Pipes и услуги и т. д.

Может ли кто-нибудь представить различия, если таковые имеются, с точки зрения концепции / фактической работы.

Благодарю. Дипак

1 ответ

AngularJS

AngularJS декоратор - это ООП шаблон.

Он редко используется в AngularJS для расширения поведения встроенных объектов. Например, следующая реализация использует $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;
    }
]);

угловатый

Угловые декораторы - это особенность языка, которая:

предлагает удобный декларативный синтаксис для изменения формы объявлений классов. Эта возможность может использоваться для множества целей, включая изменение дескриптора объявленного члена (@nonconfigurable/@enumerable), добавление метаданных (как используется Angular) и многое другое. Это позволяет прикрепить доступ

Angular использует его для присоединения метаданных к классу, члену класса (свойству) и параметрам метода. Чтобы увидеть, как это делает Angular, прочитайте " Реализация декоратора пользовательских компонентов в Angular".

В версиях больше 4 Angular будет уходить от динамической оценки декораторов во время выполнения и будет использовать статический анализ кода для извлечения метаданных, указанных в дескрипторах декоратора.

Другие вопросы по тегам