正如在 ngrx doc 中声明的那样:
IgnoreChanges:更新集合实体并忽略
此操作的所有更改跟踪。每个实体的 changeState 都保持不变。
PreserveChanges:更新未更改实体的当前值。对于
每个更改的实体,它保留当前值并用合并实体覆盖 originalValue。这是查询成功的
默认值。
OverwriteChanges:替换当前集合实体。对于每个
合并的实体,它会丢弃 changeState 并将 changeType 设置为
“未更改”。这是保存成功的默认值。
我将其理解为发生变化时的行为。例如,通过使用 IgnoreChanges,更新实体时,不会发出更改事件。
但是在我的代码中,即使给出了这个策略。实体$ 仍会收到更改事件。
this.resultMetaService.removeOneFromCache(previousResultMeta, { mergeStrategy: MergeStrategy.IgnoreChanges });
this.resultMetas$ = this.resultMetaService.entities$.pipe(
map(rms => {
const caseIds = this.metaService.getSyncAllEntities().map(m => m.caseId);
return rms.filter(rm => caseIds.includes(rm.caseId));
})
);
我理解错了吗?而对于 PreserveChanges 和 OverwriteChanges,接收变更事件有什么区别?