1- import { Inject , Injectable , Optional } from '@angular/core/src/di ' ;
1+ import { Inject , Injectable , Optional , NgZone } from '@angular/core' ;
22import {
33 Renderer ,
44 RootRenderer ,
@@ -28,7 +28,9 @@ export class NativeScriptRootRenderer implements RootRenderer {
2828 constructor (
2929 @Optional ( ) @Inject ( APP_ROOT_VIEW ) private _rootView : View ,
3030 @Inject ( DEVICE ) device : Device ,
31- private _animationDriver : AnimationDriver ) {
31+ private _animationDriver : AnimationDriver ,
32+ private _zone : NgZone ) {
33+
3234 this . _viewUtil = new ViewUtil ( device ) ;
3335 }
3436
@@ -52,7 +54,7 @@ export class NativeScriptRootRenderer implements RootRenderer {
5254 renderComponent ( componentProto : RenderComponentType ) : Renderer {
5355 let renderer = this . _registeredComponents . get ( componentProto . id ) ;
5456 if ( isBlank ( renderer ) ) {
55- renderer = new NativeScriptRenderer ( this , componentProto , this . _animationDriver ) ;
57+ renderer = new NativeScriptRenderer ( this , componentProto , this . _animationDriver , this . _zone ) ;
5658 this . _registeredComponents . set ( componentProto . id , renderer ) ;
5759 }
5860 return renderer ;
@@ -63,16 +65,18 @@ export class NativeScriptRootRenderer implements RootRenderer {
6365export class NativeScriptRenderer extends Renderer {
6466 private componentProtoId : string ;
6567 private hasComponentStyles : boolean ;
66- private rootRenderer : NativeScriptRootRenderer ;
6768
6869 private get viewUtil ( ) : ViewUtil {
6970 return this . rootRenderer . viewUtil ;
7071 }
7172
72- constructor ( private _rootRenderer : NativeScriptRootRenderer , private componentProto : RenderComponentType , private animationDriver : AnimationDriver ) {
73+ constructor (
74+ private rootRenderer : NativeScriptRootRenderer ,
75+ private componentProto : RenderComponentType ,
76+ private animationDriver : AnimationDriver ,
77+ private zone : NgZone ) {
78+
7379 super ( ) ;
74- this . rootRenderer = _rootRenderer ;
75- let page = this . rootRenderer . page ;
7680 let stylesLength = componentProto . styles . length ;
7781 this . componentProtoId = componentProto . id ;
7882 for ( let i = 0 ; i < stylesLength ; i ++ ) {
@@ -93,7 +97,7 @@ export class NativeScriptRenderer extends Renderer {
9397 }
9498
9599 renderComponent ( componentProto : RenderComponentType ) : Renderer {
96- return this . _rootRenderer . renderComponent ( componentProto ) ;
100+ return this . rootRenderer . renderComponent ( componentProto ) ;
97101 }
98102
99103 selectRootElement ( selector : string ) : NgView {
@@ -211,7 +215,13 @@ export class NativeScriptRenderer extends Renderer {
211215
212216 public listen ( renderElement : NgView , eventName : string , callback : Function ) : Function {
213217 traceLog ( 'NativeScriptRenderer.listen: ' + eventName ) ;
214- let zonedCallback = ( < any > global ) . Zone . current . wrap ( callback ) ;
218+ // Explicitly wrap in zone
219+ let zonedCallback = ( ...args ) => {
220+ this . zone . run ( ( ) => {
221+ callback . apply ( undefined , args ) ;
222+ } ) ;
223+ } ;
224+
215225 renderElement . on ( eventName , zonedCallback ) ;
216226 if ( eventName === View . loadedEvent && renderElement . isLoaded ) {
217227 const notifyData = { eventName : View . loadedEvent , object : renderElement } ;
0 commit comments