Angular: Использование ViewChild и Input одновременно, побочные эффекты или лучшие практики? - PullRequest
0 голосов
/ 20 февраля 2020

Будут ли какие-либо ошибки или коллизии при одновременном использовании ViewChild и Input? Или это рекомендуемая практика в целом?

В настоящее время есть родительский и дочерний компоненты.

Требования:

a) Родителю необходимо сообщить дочернему компоненту, что он должен выполнять многие вещи: пометить форму при касании обновите значения, управляйте DOM, удалите валидаторы и т. д. c. Вещи, которые сложнее с @Input ().

b) Также необходимо применить ввод, однако, глядя на ресурс здесь, ViewChild против Input / Ouput - Angular Рекомендации

ViewChild не будет отображать дочерний компонент View изменения данных из текущих входных данных с NgOnChanges (). Однако использование @Input () отобразит изменения в Input / параметре.

Так что, если использовать оба параметра, ViewChild And Input для извлечения обоих преимуществ, задаетесь вопросом, может ли это вызвать ошибки позже? Будут ли у Native Angular 8 какие-либо проблемы с каналом, если у него есть эти два способа общения с ребенком?

Другой ресурс:

@input vs viewchild от angular для отправки данных от родителя к дочернему компоненту

1 Ответ

1 голос
/ 20 февраля 2020

Указанная вами ссылка устарела. На мой взгляд, использование viewChild полезно, когда мы хотим использовать метод или функцию дочернего элемента (*) или изменить его аспект. Для управления переменной, FormGroup или formControl лучше всего использовать @Input.

Помните, что когда мы передаем объект дочернему элементу во входном элементе, существует уникальный объект, поэтому родительский и дочерний элементы имеют значение, когда происходит любое изменение - в дочерних элементах или в родительских - например, если мы передаем FormGroup, вы можете пометить как затронутые, удалить / добавить валидаторы, использовать setValue ... из родительского или дочерних форм. Что касается @Input, то верно, что если у вас есть «фиксированный ввод» - вы передаете переменную, которая не изменяется - как

<child greet="Hello word"></child>

Вы должны использовать @ Атрибут в конструкторе, а НЕ на входе

constructor(@Attribute('greet') greet){}

(*) вы можете использовать вход с установщиком, но в этом случае мне больше нравится использовать viewChild или ссылку на переменную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...