ng之ChangeDetectorRef

262 阅读1分钟
export abstract class ChangeDetectorRef {
  abstract markForCheck(): void;
  abstract detach(): void;
  abstract detectChanges(): void;
  abstract reattach(): void;
}

有的时候这些也无法满足需求,常常数据变化的时候,我们常常因为数据变化更新到UI上而感到莫名其妙的懊恼和无力!这是他妈什么情况,我markForCheck还是不更新!

detach关闭变化检测 reattach开启关闭的变化检测 markForCheck执行变化检测,原因:并不一定能检测到变化,而变更检测的核心是

export function looseIdentical(a: any, b: any): boolean {
  return a === b || typeof a === 'number' && typeof b === 'number' && isNaN(a) && isNaN(b);
}

所以这是一个大坑,数据变化必须是引用变化,也就是说,执行markForCheck时,数据必须满足looseIdentical条件才会触发变化! detectChanges执行一次!