1

I'm using Ionic 3 with based on angular 4 framework. And I need to know if I have multiple children components can I load them asynchronously, one by one:

  1. Load parent;
  2. Load first child;
  3. When first child loaded, load second child;
  4. When second child loaded, load third child
  5. and so on

For example I have a parent component app.module.ts with children:

@NgModule({
declarations: [
    AppComponentPage
],
imports: [
    IonicPageModule.forChild(AppComponentPage),
    ChildOneComponentModule,
    ChildTwoComponentModule,
    ChildThreeComponentModule,
    ChildFourComponentModule,
],
entryComponents: [
    AppComponentPage
]})
export class AppComponentPageModule {}

and app.component.ts:

import { Component } from '@angular/core';
//import all child components

@Component({
  selector: 'app-parent-component',
  template: `
      <child1-component></child1-component>
      <child2-component></child2-component>
      <child3-component></child3-component>
      <child4-component></child4-component>
  `
 })
 export class AppComponentPage {

    //HOW TO LOAD?

 }
Merge-pony
  • 1,668
  • 3
  • 18
  • 32

2 Answers2

6

In each of your child components, add an output:

@Output
initialized = new EventEmitter<boolean>();

and emit an event when you decide that the component is initialized (or loaded, as your question says), and that the next one can thus be displayed:

ngOnInit() {
  ...
  this.initialized.emit(true);
}

In the parent component, have a counter:

counter = 0;

Increment the counter every time a component is initialized, and don't display a component until the counter is allowing it to be displayed:

<child1-component (initialized)="counter++"></child1-component>
<child2-component (initialized)="counter++" *ngIf="counter > 0"></child2-component>
<child3-component (initialized)="counter++" *ngIf="counter > 1"></child3-component>
<child4-component (initialized)="counter++" *ngIf="counter > 2"></child4-component>
JB Nizet
  • 678,734
  • 91
  • 1,224
  • 1,255
2

Perhaps you mean something like:

<child1-component *ngFor="let child of children"></child1-component>
class MyComponent {
  children:any[] = [];

  load() {
    Observable.interval(1000).take(5).subscribe(e => this.children.push(e));
  }
}

If you want to add different components, you can use an approach like Angular 2 dynamic tabs with user-click chosen components

Günter Zöchbauer
  • 623,577
  • 216
  • 2,003
  • 1,567