@@ -15,9 +15,11 @@ import {
15
15
Injectable ,
16
16
Input ,
17
17
NgModule ,
18
+ NgZone ,
18
19
OnDestroy ,
19
20
Output ,
20
21
booleanAttribute ,
22
+ inject ,
21
23
} from '@angular/core' ;
22
24
import { Observable , Observer , Subject , Subscription } from 'rxjs' ;
23
25
import { debounceTime , filter , map } from 'rxjs/operators' ;
@@ -73,6 +75,8 @@ export class ContentObserver implements OnDestroy {
73
75
}
74
76
> ( ) ;
75
77
78
+ private _ngZone = inject ( NgZone ) ;
79
+
76
80
constructor ( private _mutationObserverFactory : MutationObserverFactory ) { }
77
81
78
82
ngOnDestroy ( ) {
@@ -101,7 +105,11 @@ export class ContentObserver implements OnDestroy {
101
105
map ( records => records . filter ( record => ! shouldIgnoreRecord ( record ) ) ) ,
102
106
filter ( records => ! ! records . length ) ,
103
107
)
104
- . subscribe ( observer ) ;
108
+ . subscribe ( records => {
109
+ this . _ngZone . run ( ( ) => {
110
+ observer . next ( records ) ;
111
+ } ) ;
112
+ } ) ;
105
113
106
114
return ( ) => {
107
115
subscription . unsubscribe ( ) ;
@@ -115,21 +123,23 @@ export class ContentObserver implements OnDestroy {
115
123
* new one if not.
116
124
*/
117
125
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 ++ ;
127
140
}
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
+ } ) ;
133
143
}
134
144
135
145
/**
0 commit comments