Skip to content

Commit d60179f

Browse files
committed
fixup! fix(cdk/observers): Run content changed callback in NgZone
1 parent 7a1118a commit d60179f

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

src/cdk/observers/observe-content.ts

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ import {
1515
Injectable,
1616
Input,
1717
NgModule,
18+
NgZone,
1819
OnDestroy,
1920
Output,
2021
booleanAttribute,
22+
inject,
2123
} from '@angular/core';
2224
import {Observable, Observer, Subject, Subscription} from 'rxjs';
2325
import {debounceTime, filter, map} from 'rxjs/operators';
@@ -73,6 +75,8 @@ export class ContentObserver implements OnDestroy {
7375
}
7476
>();
7577

78+
private _ngZone = inject(NgZone);
79+
7680
constructor(private _mutationObserverFactory: MutationObserverFactory) {}
7781

7882
ngOnDestroy() {
@@ -101,7 +105,11 @@ export class ContentObserver implements OnDestroy {
101105
map(records => records.filter(record => !shouldIgnoreRecord(record))),
102106
filter(records => !!records.length),
103107
)
104-
.subscribe(observer);
108+
.subscribe(records => {
109+
this._ngZone.run(() => {
110+
observer.next(records);
111+
});
112+
});
105113

106114
return () => {
107115
subscription.unsubscribe();
@@ -115,21 +123,23 @@ export class ContentObserver implements OnDestroy {
115123
* new one if not.
116124
*/
117125
private _observeElement(element: Element): Subject<MutationRecord[]> {
118-
if (!this._observedElements.has(element)) {
119-
const stream = new Subject<MutationRecord[]>();
120-
const observer = this._mutationObserverFactory.create(mutations => stream.next(mutations));
121-
if (observer) {
122-
observer.observe(element, {
123-
characterData: true,
124-
childList: true,
125-
subtree: true,
126-
});
126+
return this._ngZone.runOutsideAngular(() => {
127+
if (!this._observedElements.has(element)) {
128+
const stream = new Subject<MutationRecord[]>();
129+
const observer = this._mutationObserverFactory.create(mutations => stream.next(mutations));
130+
if (observer) {
131+
observer.observe(element, {
132+
characterData: true,
133+
childList: true,
134+
subtree: true,
135+
});
136+
}
137+
this._observedElements.set(element, {observer, stream, count: 1});
138+
} else {
139+
this._observedElements.get(element)!.count++;
127140
}
128-
this._observedElements.set(element, {observer, stream, count: 1});
129-
} else {
130-
this._observedElements.get(element)!.count++;
131-
}
132-
return this._observedElements.get(element)!.stream;
141+
return this._observedElements.get(element)!.stream;
142+
});
133143
}
134144

135145
/**

0 commit comments

Comments
 (0)