Angular: возможно ли запрашивать элементы всей DOM из определенного компонента?
С фрагментами DOM ниже:
<ng-app>
<ng-comp1></ng-comp1>
<ng-comp2>
<ng-comp3></ng-comp3>
</ng-comp2>
<ng-comp1></ng-comp1>
</ng-app>
Я бы хотел из
ng-comp3
перечислить все компоненты
ng-comp1
в документе DOM. Есть способ для этого?
ViewChildren
перечислить только компоненты внутри
ng-comp3
.
document.querySelector
list элемент DOM, а не компонент.
1 ответ
Короткий ответ: "Нет, вы не можете напрямую перечислить их".
С другой стороны, вы можете
ng-app
введен в ваш
ng-comp3
компонент и взаимодействовать с
ng-comp1
через
ng-app
.
@Component({
selector: 'inner-hello',
template: `<h1>Hello {{name}}!</h1>`,
styles: [`h1 { font-family: Lato; }`]
})
export class InnerHelloComponent implements AfterViewInit {
@Input() name: string;
constructor(@Inject(forwardRef(() => AppComponent)) private app: AppComponent) {
console.log(app.name);
}
ngAfterViewInit() {
// Here you will be able to access your ViewChild
}
}
Не забывайте, что
ViewChild
и
ViewChildren
не заселяться, пока
ngAfterViewInit
уволен
Идея, как можно было заметить, состоит в том, чтобы запросить
ng-comp1
в
ng-app
компонент, сохраните его в общедоступной переменной и получите доступ к нему из
ng-comp3
. Таким же образом я получаю доступ к собственности
name
в моем примере