2016-06-28 2 views
7

Я только начал использовать Angular 2 и задавался вопросом, почему некоторые свойства, такие как selector и template, помещаются в компоненты декораторов, а не в классы компонентов.Почему Угловые 2 используют декораторы?

В чем смысл использования всех этих декораторов в Угловом 2?

ответ

2
  • Чтобы сделать его легким для инструментов, чтобы обеспечить все виды поддержки в шаблонах, как:

    • ошибки проверки
    • автозавершения
    • графических дизайнеров GUI
  • Сгенерировать код из декораторов, который позволяет:

    • определить некоторые вещи более декларативно или
    • генерировать различный код в зависимости от некоторой конфигурации (как и предстоящая форума шаблон компилятор)

код необходимо будет выполняться, чтобы использовать могут появляться выражения результатов. Декораторы могут быть легко оценены статически, не выполняя код TypeScript (за исключением, может быть, простого и ограниченного подмножества).

0

В общем, декораторы позволяют выполнять функции. Например, @Component выполняет функцию Component, импортированную из Angular2. Под капотом такие декораторы определяют некоторые метаданные в классе. Это позволяет настроить класс для «флага» его как компонента. Затем Angular2 может связывать селекторов в шаблонах с таким классом.

Эта статья может дать вам больше намеков о том, что происходит под капотом:

Вы можете заметить, что декораторы могут применяться в Машинопись на разных уровнях (класс, класс собственности, метод параметр).

+1

«В общем, декораторы позволяют выполнять функции». Это не очень полезно. Языки программирования позволяют выполнять «Выполнение функций» ... – spinkus

4

В дополнение к уже имеющимся на платформе ответам, я бы хотел, чтобы чип в более общем виде. Этот вопрос, на мой взгляд, как-то связано с решением о выборе декоратор над наследования (например, @Component против extends Component)

Некоторые из преимуществ использования декораторов являются:

1. Разделение проблем:

Информация внутри декораторов декларативна, они определяют поведение класса, скорее всего, со временем не изменятся и будут использоваться каркасом. Свойства и поля класса - это данные, специфичные для класса, всегда обрабатываются и часто обновляются, и они имеют смысл только внутри самого класса. Эти два типа данных не должны смешиваться.

2.Поддержка нескольких модификаций

Многие языки предотвращают множественное наследование из-за Diamond problem. С другой стороны, один класс может иметь несколько декораторов для разных целей (например, @Component и устаревшие @RouteConfig)

+1

Я действительно не покупаю второй аргумент. Где в Angular2 использование декораторов облегчает проблему множественного наследования? Да, декораторы хороши для маркировки классов метаданных. Но они использовали их как объявления типа/типа. Компоненты классов/типов всегда одеты с \ @Component. Модули всегда с \ @NgModule, и нет смысла размещать \ @Component на чем-либо, кроме того, что является логичным классом Component и т. Д. ИМХО это сомнительное дизайнерское решение. Не сказать, что нет никаких преимуществ - так же, как и все. – spinkus

Смежные вопросы