Я хочу организовать все свои вкладки динамическими компонентами компонентов.Я использую primg ng для вкладок пользовательского интерфейса.В настоящее время мой код
До
Здесь каждая вкладка содержит каждый компонент.когда загружается этот маршрут, все компоненты инициализируются, поэтому я хочу сократить время загрузки, используя динамическую загрузку компонентов.Позже я попытался организовать свои компоненты, используя динамический загрузчик компонентов, предоставляемый anhular.
После того, как allTabs.component.html выглядит как
-
<p-tabPanel header="Contracts">
<ng-template ad-cm></ng-template>
</p-tabPanel>
<p-tabPanel header="Allocations">
</p-tabPanel>
allTabs.component.ts
@Component({
templateUrl: './rmanArrangementsOverView.component.html',
selector: 'rmanArrangementsOverView-data' entryComponents:
[AllocationComponent, ContractsComponent]
})
export class ALLCom {
@ViewChild(AdCmDirective) adCm: AdCmDirective; ref:ComponentRef<any>; private loadedComponentsArray = [
{
'componentIndex': 1,
'componentName': ContractsComponent
},
{
'componentIndex': 2,
'componentName': AllocationComponent
},
{
'componentIndex': 3,
'componentName': RmanContTransToReleaseComponent
},
{
'componentIndex': 4,
'componentName': RmanOrderBookingsVComponent
},
{
'componentIndex': 5,
'componentName': RmanInvoiceHeadersVComponent
} ] constructor(private componentFactoryResolver: ComponentFactoryResolver){
}
ngOnInit() {
}
loadComponent(component) {
let componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
let viewContainerRef = this.adCm.viewContainerRef;
viewContainerRef.clear();
let componentRef = viewContainerRef.createComponent(componentFactory);
this.ref=componentRef; } removeComponent(){
try{
this.ref.destroy();
}
catch(e){
} }
handleChange(event: any) {
console.log(event);
var index = event.index;
console.log('event tab index : ' + index);
this.tabIndex = index;
let component = this.loadedComponentsArray.find(c=> {
if(c.componentIndex == this.tabIndex) return true
});
console.log(component, 'component');
this.removeComponent();
this.loadComponent(component.componentName); }
a.component.html
Контракты !!
<div>
test
<app-a [arrId]='parrangementId'></app-a>
b.componet.html
<div>Allocation</div>
<app-b [arrId]='parrangementId'>
</app-b>
Даже у меня есть дочерний компонент в , компоненты
Например: AppAComponent.htnml (
<app-a-child [asle]="ddata"></app-a-child>