@@ -16,6 +16,25 @@ const addStyleToCss = profile('"renderer".addStyleToCss', function addStyleToCss
16
16
}
17
17
} ) ;
18
18
19
+ function runInRootZone < T > ( fn : ( ) => T ) : T {
20
+ if ( typeof Zone === 'undefined' ) {
21
+ return fn ( ) ;
22
+ }
23
+ return Zone . root . run ( fn ) ;
24
+ }
25
+
26
+ function inRootZone ( ) {
27
+ return function ( target : Object , key : string | symbol , descriptor : PropertyDescriptor ) {
28
+ const childFunction = descriptor . value ;
29
+ descriptor . value = ( ...args : any [ ] ) => {
30
+ return runInRootZone ( ( ) => {
31
+ childFunction . apply ( this , args ) ;
32
+ } ) ;
33
+ } ;
34
+ return descriptor ;
35
+ } ;
36
+ }
37
+
19
38
export class NativeScriptRendererFactory implements RendererFactory2 {
20
39
private componentRenderers = new Map < string , Renderer2 > ( ) ;
21
40
private defaultRenderer : Renderer2 ;
@@ -119,6 +138,7 @@ class NativeScriptRenderer implements Renderer2 {
119
138
NativeScriptDebug . rendererLog ( 'NativeScriptRenderer.destroy' ) ;
120
139
}
121
140
}
141
+ @inRootZone ( )
122
142
createElement ( name : string , namespace ?: string ) {
123
143
if ( NativeScriptDebug . enabled ) {
124
144
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.createElement: ${ name } ` ) ;
@@ -134,38 +154,44 @@ class NativeScriptRenderer implements Renderer2 {
134
154
}
135
155
return view ;
136
156
}
157
+ @inRootZone ( )
137
158
createComment ( value : string ) {
138
159
if ( NativeScriptDebug . enabled ) {
139
160
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.createComment ${ value } ` ) ;
140
161
}
141
162
return this . viewUtil . createComment ( value ) ;
142
163
}
164
+ @inRootZone ( )
143
165
createText ( value : string ) {
144
166
if ( NativeScriptDebug . enabled ) {
145
167
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.createText ${ value } ` ) ;
146
168
}
147
169
return this . viewUtil . createText ( value ) ;
148
170
}
149
- destroyNode : ( node : any ) => void = ( node : View ) => {
150
- if ( NativeScriptDebug . enabled ) {
151
- NativeScriptDebug . rendererLog ( `NativeScriptRenderer.destroyNode node: ${ node } ` ) ;
152
- }
153
- if ( node ?. destroyNode ) {
154
- node ?. destroyNode ( ) ;
155
- }
156
- } ;
171
+ destroyNode : ( node : any ) => void = ( node : View ) =>
172
+ runInRootZone ( ( ) => {
173
+ if ( NativeScriptDebug . enabled ) {
174
+ NativeScriptDebug . rendererLog ( `NativeScriptRenderer.destroyNode node: ${ node } ` ) ;
175
+ }
176
+ if ( node ?. destroyNode ) {
177
+ node ?. destroyNode ( ) ;
178
+ }
179
+ } ) ;
180
+ @inRootZone ( )
157
181
appendChild ( parent : View , newChild : View ) : void {
158
182
if ( NativeScriptDebug . enabled ) {
159
183
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.appendChild child: ${ newChild } parent: ${ parent } ` ) ;
160
184
}
161
185
this . viewUtil . appendChild ( parent , newChild ) ;
162
186
}
187
+ @inRootZone ( )
163
188
insertBefore ( parent : any , newChild : any , refChild : any ) : void {
164
189
if ( NativeScriptDebug . enabled ) {
165
190
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.insertBefore child: ${ newChild } ` + `parent: ${ parent } refChild: ${ refChild } ` ) ;
166
191
}
167
192
this . viewUtil . insertBefore ( parent , newChild , refChild ) ;
168
193
}
194
+ @inRootZone ( )
169
195
removeChild ( parent : any , oldChild : any , isHostElement ?: boolean ) : void {
170
196
if ( NativeScriptDebug . enabled ) {
171
197
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.removeChild child: ${ oldChild } parent: ${ parent } ` ) ;
@@ -205,6 +231,7 @@ class NativeScriptRenderer implements Renderer2 {
205
231
}
206
232
return node . nextSibling ;
207
233
}
234
+ @inRootZone ( )
208
235
setAttribute ( el : any , name : string , value : string , namespace ?: string ) : void {
209
236
if ( NativeScriptDebug . enabled ) {
210
237
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.setAttribute ${ namespace ? namespace + ':' : '' } ${ el } .${ name } = ${ value } ` ) ;
@@ -216,30 +243,35 @@ class NativeScriptRenderer implements Renderer2 {
216
243
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.removeAttribute ${ namespace ? namespace + ':' : '' } ${ el } .${ name } ` ) ;
217
244
}
218
245
}
246
+ @inRootZone ( )
219
247
addClass ( el : any , name : string ) : void {
220
248
if ( NativeScriptDebug . enabled ) {
221
249
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.addClass ${ name } ` ) ;
222
250
}
223
251
this . viewUtil . addClass ( el , name ) ;
224
252
}
253
+ @inRootZone ( )
225
254
removeClass ( el : any , name : string ) : void {
226
255
if ( NativeScriptDebug . enabled ) {
227
256
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.removeClass ${ name } ` ) ;
228
257
}
229
258
this . viewUtil . removeClass ( el , name ) ;
230
259
}
260
+ @inRootZone ( )
231
261
setStyle ( el : any , style : string , value : any , flags ?: RendererStyleFlags2 ) : void {
232
262
if ( NativeScriptDebug . enabled ) {
233
263
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.setStyle: ${ el } , ${ style } = ${ value } ` ) ;
234
264
}
235
265
this . viewUtil . setStyle ( el , style , value ) ;
236
266
}
267
+ @inRootZone ( )
237
268
removeStyle ( el : any , style : string , flags ?: RendererStyleFlags2 ) : void {
238
269
if ( NativeScriptDebug . enabled ) {
239
270
NativeScriptDebug . rendererLog ( 'NativeScriptRenderer.removeStyle: ${styleName}' ) ;
240
271
}
241
272
this . viewUtil . removeStyle ( el , style ) ;
242
273
}
274
+ @inRootZone ( )
243
275
setProperty ( el : any , name : string , value : any ) : void {
244
276
if ( NativeScriptDebug . enabled ) {
245
277
NativeScriptDebug . rendererLog ( `NativeScriptRenderer.setProperty ${ el } .${ name } = ${ value } ` ) ;
0 commit comments