#angular
#angular
Вопрос:
Например, если бы у меня было
<app-component>
<posts-component>
<h1 class="title">Lorem</h1>
</posts-component>
</app-component>
Есть какой-нибудь Angular API для запроса этого h1
внутри <posts-component>
из AppComponent?
Комментарии:
1. Лучше не использовать селекторы на основе браузера / документа. Ваш вопрос немного надуманный, потому что это немного зависит от того, как выглядит ваш posts-компонент внутренне. Без фактического кода единственным правильным ответом было бы: да, конечно, это можно сделать с помощью Angular API.
Ответ №1:
Для достижения этого вам нужно использовать класс Angular ElementRef. вот пример ниже:
ваш html выглядит следующим образом —
<posts-component>
<h1 #myDOMElement class="title">Lorem</h1> *// added ref element as "myDOMElement"*
</posts-component>
</app-component>
Внутри вашего файла component.ts —
import { Component, ViewChild, ElementRef } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = "Angular ElementRef and @ViewChild Example";
@ViewChild('myDOMElement', { static: true }) MyDOMElement: ElementRef;
// If { static: true }
ngOnInit() {
console.log(this.MyDOMElement);
this.MyDOMElement.nativeElement.innerHTML = "I am changed by ElementRef amp; ViewChild";
}
// if { static: false }
ngAfterViewInit() {
console.log(this.MyDOMElement);
this.MyDOMElement.nativeElement.innerHTML = "I am changed by ElementRef amp; ViewChild";
}
}
До Angular 8 нам нужно было получить ElemementRef в привязке жизненного цикла компонента ngAfterViewInit(). Но теперь мы можем присвоить static значение true и получить ссылку на элемент в компонентном перехватчике ngOnInit().
В версии 9 вы можете удалить свойство static и использовать его в ngAfterViewInit()