Угловой 2 загружает дочерний компонент на клик
Можно ли загрузить дочерний компонент при нажатии кнопки в родительском шаблоне? Например, родительский шаблон html будет выглядеть так:
<button (click)="loadMyChildComponent();">Load</button>
<my-child-component></my-child-component>
Причина, по которой я хочу это сделать, заключается в том, что компонент my-child занимает некоторое время для загрузки, и это замедляет все. Поэтому я хотел бы загрузить его только в том случае, если пользователь нажимает на его загрузку. Я не могу изменить структуру родительского шаблона. Он должен быть там.
Я хочу ввести ngOnInit дочернего компонента только при нажатии кнопки загрузки.
Ответы
Ответ 1
Вы можете использовать директиву * ngIf для инициирующего компонента из parent, поэтому ваш код будет таким
<button (click)="loadMyChildComponent();">Load</button>
<my-child-component *ngIf="loadComponent"></my-child-component>
loadMyChildComponent() {
loadComponent = true;
...
}
Ответ 2
Используйте флаг для управления загрузкой дочернего компонента.
<button (click)="loadMyChildComponent();">Load</button>
<div *ngIf= 'loadComponent'>
<my-child-component></my-child-component>
</div>
В вашем родительском компоненте.ts
private loadComponent = false;
loadMyChildComponent(){
this.loadComponent = true;
}
Ответ 3
Вы можете использовать, пожалуй, самую основную директиву ngIf
<button (click)="loadMyChildComponent();">Load</button>
<my-child-component *ngIf="loaded"></my-child-component>
В вашем компоненте
loadMyChildComponent(){
loaded=true;
}
Ответ 4
<button (click)="loadMyChildComponent()">Load</button>
<div [hidden]="hide">
<my-child-component></my-child-component>
</div>
В родительском классе объявите varible hide и сделайте функцию loadMyChildComponent
public hide = true;
loadMyChildComponent(){
this.hide= true;
}
Ответ 5
Вы можете использовать угловую директиву *ngIf
<button (click)="loadChildComponent();">Load Child Component</button> <child-component *ngIf="childComponentLoaded"></child-component>
в вашем component.js
public childComponentLoaded: boolean = false;
loadChildComponent() {
this.childComponentLoaded = true
}