【发布时间】:2022-01-25 01:37:27
【问题描述】:
我有一个使用以下模型类的角度应用程序:
export interface Product {
id: number;
name: string;
currentPrice: number;
orders?: Order[];
lastUpdate?: Date;
}
export interface Order {
orderId: string;
qty: number;
amount: number;
}
当用户添加订单时,我想在 UI 上添加注释。但是,Angular 在不更新产品的对象引用的情况下不会触发更改检测。
复制于:https://stackblitz.com/edit/ag-grid-angular-use-gridoptions-k75cr8?file=src/app/order.component.ts
“添加订单”按钮不会添加“产品/订单在 hh:mm:sss 上更新”条目。 “添加订单和更改参考”按钮添加它的条目。
为什么我需要更新模型的参考来触发变化检测? (为什么在点击“添加订单”按钮时订单表仍然更新而没有触发更改检测)
【问题讨论】:
-
谢谢。它回答了第一个问题,即为什么我需要更新模型的参考。看起来这就是 Angular 的工作原理!你知道为什么订单表仍然会更新而不触发更改检测吗?
-
您没有启用更改检测,因此使用默认策略。此策略检查对象突变,这发生在
addOrder。 -
我相信有两种策略 - Default 和 OnPush。 OnPush 策略会检测到这种变化吗?
-
No
OnPush不会检测到它。但是,在这种情况下,您可以在代码中手动调用ChangeDetectionRef.detectChanges(),此时您希望 Angular 检测您的更新。
标签: angular typescript angular-changedetection