angular - ngIf- Uttrykket har endret seg etter at det ble sjekket. Forrige verdi: 'ngIf: false'. Nåværende verdi: 'ngIf: true'
Hvordan kalle en metode fra en komponent til en annen når det ikke er noen foreldre-barn-relasjon?
Jeg har 2 søster-/brorkomponenter og som nedenfor:
header.ts
private postValues() {
this._PartService.PostDataValues(this.search)
.subscribe(result => {
})
}
del.ts
this._PartService.getMasterData()
.subscribe(result => {
})
I dette tilfellet trenger jeg å kalle postValues()-metoden inni getMasterData() for å hente noen beskrivelsesverdier, og den har ingen kommunikasjon mellom foreldre og barn.
Svar #1
Det er ikke mulig å utløse en søsterkomponentmetode direkte, men det finnes en måte å utløse en søsterkomponenthendelse på ved bruk av import { BehaviorSubject } from 'rxjs';
Jeg bruker denne tilnærmingen for å sende data til søsterkomponenten, men den fungerer også hvis du utløser en hendelse.
Først lager du en tjeneste, tjeneste som jeg kaller DataService.ts
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private triggerEventMsg = new BehaviorSubject(false);
triggerEvent = this.triggerEventMsg.asObservable();
constructor() { }
triggerEvent(val: boolean) {
this.messageSource.next(message)
}
}
Nå utløser én komponent en annen komponent. For nå utløser Com1 Com2-hendelsen.
Com1 utløser DataService triggerEvent med å sende boolsk verdi.
Com1.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com1',
template: `
{{message}}
<button (click)="newMessage()">New Message</button>
`
})
export class Com1 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
}
com1ClickEvent() {
this.data.triggerEvent(true);
}
}
Com2 Observer den variabelen når data endres, metoden utløses i Com2-komponenten.
Com2.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com2',
template: `
<p>Com2</p>
`
})
export class Com2 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
this.data.triggerEventMsg.subscribe(message => {
// Do What ever you want.
})
}
}
Svar #2
Min løsning er å bruke
ngAfterViewChecked(){
this.cdRef.detectChanges();
}
i komponenten der du får feilen
