Angular – przekazywanie danych między modułami

  Angular

Parent -> child

W parencie dodajemy zmienną

export class AppComponent {
    tasksList = ['xyz', 'test, 'elem'];
}

Następnie w children .ts

export class ChildComponent implements OnInit {
    @Input() tasks; //trzeba doinstalować moduł inputa z core
}

następnie żeby przypisać wartość z parenta do właściwości dziecka trzeba w miejscu wywołania (czyli np w app.component.html

<tag-childrena [tasks]="tasksList"></tag-childrena>

Nasłuchiwanie zmiennych z serwisu

Używamy rxjs (lekcja 52 kursu)

new Subject<number>; //trzeba zaimportować

Child -> Parent

w children .ts definiujemy zmienną, która jest instancją obiektu EventEmitter

eventTask = new EventEmitter<string>();

następnie np. przy jakiejś funkcji odpalanej po kliku:

select(task) {
    this.eventTask.emit(task);
}

a w miejscu wywołania w szablonie (np w app.component.html)

<tag-childrena (eventTask)="selected($event)"></tag-childrena>

tutaj odpalana jest akurat funkcja selected. Przesyłany parametr musi mieć nazwę $event

a w .ts parenta:

selected(dowolnaNazwaZmiennej: string): void{
    console.log(dowolnaNazwaZmiennej);
}

Przesyłanie poprzez ngcontent

Jeżeli wywołujemy w parencie jakieś child i pomiędzy tagami umieścimy jakiś html, żeby się wyświetlił, musimy dodać w child tag ng-content czyli:

w parencie:

<app-child>
    tutaj jakiś html
</app-child>

w dziecku (w pliku html dziecka konkretniej:

<p>jakiś normalny tekst z componentu</p>
<ng-content></ng-content>

to sprawi, że na stronie wyświetli się tekst „tutaj jakiś html”