2016-11-17 2 views
2

Есть два способа определить вход на компоненте:Почему `@ input` декоратор предпочтительнее` входов: [] `

@Component({ 
    inputs: ['displayEntriesCount'], 
    ... 
}) 
export class MyTable implements OnInit { 
    displayEntriesCount: number; 

и это

@Component({ 
    ... 
}) 
export class MyTable implements OnInit { 
    @Input() displayEntriesCount: number; 

Я предположил бы, что первый подход лучше, поскольку он явно объявляет зависимости компонентов без необходимости проверки класса дополнений. Однако this article известным разработчиком утверждает, что второй подход является предпочтительным:

Использование @Input является предпочтительным подходом, однако мы не должны использовать его.

Любые идеи, почему?

ответ

2

Per руководство угловой стиль https://angular.io/docs/ts/latest/guide/style-guide.html#!#-a-id-05-12-a-decorate-input-and-output-properties-inline

Украсьте вход и выход Свойства Инлайн

ли использовать @Input и @output вместо входов и выходов свойств от @Directive и @ Component` декораторы:

Устанавливайте @Input() или @Output() в той же строке, что и свойства , которые они украшают.

  • Почему? Легче и понятнее определить, какие свойства в классе являются входами или выходами.

  • Почему? Если вам когда-либо понадобится переименовать свойство или имя события, связанное с @Input или @Output, вы можете изменить его на одно место.

  • Почему? Декларация метаданных, прикрепленная к директиве, короче и, следовательно, более читаема.

  • Почему? Размещение декоратора в одной строке делает более короткий код и все еще легко идентифицирует свойство как вход или выход.

3

Это как-то предпочитает руководство по стилю, но нет сильных аргументов. Возможно, потому, что свойства и методы хранятся вместе со связыванием. Но ваш аргумент также действителен. Некоторые предпочитают одно, другое - другое.

Если вы предпочитаете host: ..., просто используйте его. Это все еще довольно часто.

+0

спасибо, не понял о 'host: ...', вы можете уточнить? –

+0

Извините, не обратил достаточного внимания при чтении вашего вопроса. 'host' - это аналогичный параметр, такой как' input' и 'output' с такими декораторами, как' @HostBinding() 'и' @HostListener() '(в дополнение к' @Input() 'и' @Output() '). То, что я сказал, применяется одинаково для 'input',' output' и 'host' –

+0

, получило это, спасибо большое –

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