我正在使用將輸入設定為 ChildComponent 的 ParentComponent。如果更改的輸入是數字,則 ngOnChanges 鉤子會觸發,但如果它是陣列,則不會。
有人可以告訴我我做錯了什么,或者如何在更改陣列時觸發 ngOnChanges 嗎?
謝謝你。
孩子 ts:
export class ChildComponent implements OnInit {
@Input() num = 0;
@Input() arr: Array<string> = [];
constructor() { }
ngOnInit(): void {
}
ngOnChanges() {
console.log('input changed');
}
}
父 ts:
export class ParentComponent implements OnInit {
constructor() { }
num = 0;
arr : Array<string> =[];
ngOnInit(): void {
}
changeNumber() {
this.num = this.num 1;
}
changeArray() {
this.arr.push('some value');
}
}
父 html:
<button (click)="changeNumber()">change num</button>
<button (click)="changeArray()">change array</button>
<app-child [num]="num" [arr]="arr"></app-child>
uj5u.com熱心網友回復:
那是因為 num 是原始資料型別,而陣列不是。陣列基本上是一個物件,其中參考存盤在變數中arr。當您將新條目“推送”到陣列時,參考本身不會更改。
這就是ngOnChange不火的原因。如果要創建對陣列的新參考并向其“推送”一個值,則應使用以下代碼:
this.arr = [...this.arr, 'some value'];
uj5u.com熱心網友回復:
ngOnChanges 無法檢測到陣列更改,因為即使內容發生更改,陣列參考仍保持原樣。相反,您可以使用 setter 方法
private _arr: Array<string> = [];
@Input() set arr(data) {
this._arr= data;
console.log(this._arr);
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537502.html
標籤:数组有角度的打字稿变化
上一篇:無法在其方法之外訪問api回應
