Szukałem jakiegoś powodu tego zachowania, wartość właściwości Input() w komponencie potomnym "Param" nie została zaktualizowana we właściwym czasie, muszę użyj zaktualizowanej wartości, aby wywołać usługę jako parametr. Kliknięcie przycisku "zaktualizuj wartość podrzędną" powoduje wyświetlenie LOG B (ze starą wartością) po wyświetleniu LOG A (LOG A w ustawieniu właściwości).Właściwość wejściowa viewchild nie jest aktualizowana w razie potrzeby 2
Komponent nadrzędna
@Component({
selector: 'parent',
template: `
<child #child [param]="parentParam"></child>
<button (click)="updateChildValue()">Update child value</button>
`})
export class Parent {
@ViewChild('child') child: Child;
public parentParam: number;
public updateChildValue() {
this.parentParam = 9;
this.child.showParam();
}
}
dziecko
@Component({
selector: 'child',
template: '' })
export class Child {
private _param: number;
public get param() : number {
return this._param;
}
@Input('param')
public set param(v : number) {
this._param = v;
console.log('LOG A');
console.log(this.param);
}
public showParam() {
console.log('LOG B');
console.log(this.param);
//I need to call a service using the latest value of param here...
}
}
pożądane zachowanie jest najpierw mieć wartość param zaktualizowaną, a następnie użyć tej wartości jako parametru na usługi. LOG A następnie LOG B
dziękuję za sugestie @ HarryNinh, próbowałem użyć metod ChangeDetectorRef markForCheck i detectChanges w metodzie showParam. showParam to tylko przykład, rzeczywiste użycie: zmienna parentParam zostanie wysłana jako parametr w wywołaniu usługi. znaczenie anychange na parentParam nie oznacza, że musimy natychmiast zadzwonić do serwisu. Obecnie szukam $ digest jak w kanciastym 1.x nawet wiedząc, że robi się "automatycznie" czy myślisz, że jestem we właściwy sposób? – destined