Tôi đã tìm kiếm một số lý do của hành vi này, giá trị của thuộc tính Input() trong thành phần con 'Param' không được cập nhật vào đúng thời điểm, tôi cần sử dụng giá trị được cập nhật để gọi một dịch vụ làm tham số. Bằng cách nhấp vào nút 'cập nhật giá trị con', LOG B được hiển thị đầu tiên (với giá trị cũ) sau đó LOG A được hiển thị (LOG A nó nằm trong setter của thuộc tính).thuộc tính đầu vào viewchild không được cập nhật khi cần góc 2
thành phần thành phần Chánh
@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();
}
}
trẻ
@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...
}
}
Các hành vi mong muốn là phải có đầu tiên giá trị của param cập nhật và sau đó sử dụng giá trị đó như một tham số vào một dịch vụ. LOG A rồi LOG B
cảm ơn bạn đã sugestions của bạn @ HarryNinh, tôi đã cố gắng sử dụng các phương thức ChangeDetectorRef markForCheck và detectChanges trong phương thức showParam. showParam chỉ là một ví dụ, sử dụng thực: biến parentParam sẽ được gửi như một tham số trong một cuộc gọi đến một dịch vụ. nghĩa là anychange trên parentParam không có nghĩa là chúng ta cần gọi dịch vụ ngay lập tức. Tôi hiện đang tìm kiếm một $ digest như trong góc 1.x ngay cả khi biết điều này được thực hiện 'tự động' bạn có nghĩ rằng tôi đang đi đúng hướng không? – destined