В этой статье мы познакомим вас с декоратором Angular ViewChild
.
В некоторых ситуациях вам может потребоваться доступ к директиве, дочернему компоненту или элементу DOM из класса родительского компонента. Декоратор ViewChild
возвращает первый элемент, совпадающий с заданной директивой, компонентом или селектором шаблонов.
ViewChild
с директивамиViewChild
открывает возможность доступа к директивам.
Допустим, у нас имеется директива SharkDirective
.
В идеале мы используем @angular/cli
для генерирования
директивы:
В противном случае необходимо добавить ее вручную в app.module.ts
:
Наша директива будет искать элементы с атрибутом appShark
и добавлять в начало текста элемента слово Shark
:
Затем мы добавим Shark
в Fin
, используя его в шаблоне компонента:
При просмотре приложения в браузере оно будет выглядеть так:
OutputShark Fin!
Теперь мы можем получить доступ к переменной экземпляра creature
директивы SharkDirective
и задать переменную экземпляра extraCreature
с ее значением:
Здесь мы использовали задающий метод, чтобы задать переменную extraCreature
. Обратите внимание, что мы ждем, пока блок жизненного цикла AfterViewInit
не получит доступ к нашей переменной, поскольку тогда станут доступными дочерние компоненты и директивы.
При просмотре приложения в браузере мы видим "Shark Fin!"
, сообщение. Однако в журнале консоли отображается следующее:
OutputDolphin
Родительскому компоненту удалось получить доступ к значению из директивы.
ViewChild
с элементами DOMViewChild
предоставляет возможность доступа к элементам модели DOM, имеющим шаблонную переменную.
Допустим в нашем шаблоне имеется <input>
с шаблонной переменной #someInput
:
Теперь мы можем получить доступ к <input>
с помощью ViewChild
и задать значение
:
Когда срабатывает ngAfterViewInit
, для <input>
задается следующее значение:
OutputWhale!
Родительскому компоненту удалось задать значение дочернего элемента DOM.
ViewChild
с дочерними компонентамиViewChild
обеспечивает возможность доступа к дочернему компоненту и методам вызова или доступа к переменным экземпляра, которые доступны дочернему элементу.
Допустим, у нас имеется компонент ChildComponent
. В идеале мы используем @angular/cli
для генерирования
компонента:
В противном случае вам может понадобиться создать файлы child.component.css
и child.component.html
и вручную добавить их в app.module.ts
:
Мы добавим метод whoAmI
в компонент ChildComponent
, который возвращает следующее сообщение:
Далее мы разместим ссылку на компонент в нашем шаблоне приложения:
Теперь мы можем вызвать метод whoAmI
внутри класса родительского компонента с помощью ViewChild
, как показано здесь:
При просмотре приложения в браузере отображается журнал консоли:
OutputI am a child component!
Родительскому компоненту удалось вызвать метод whoAmI
дочернего компонента.
Вы научились использовать ViewChild
для доступа к директиве, дочернему компоненту и элементу DOM из класса родительского компонента.
Если шаблон динамически изменится на новый элемент, ViewChild
автоматически обновит шаблон.
Если вам требуется доступ к нескольким дочерним элементам, вам следует использовать метод ViewChildren
.
Если вы хотите узнать больше об Angular, посмотрите нашу страницу тем по Angular, где вы найдете упражнения и проекты по программированию.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!