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执行一次!