Obtenga methods de window libres de zona con Zone.js

¿Se puede acceder a los methods de window sin zona ( setTimeout , etc.) de alguna manera con Zone.js cargados? ¿Zone.js expone los methods originales sin parche?

El ejemplo de posible caso de uso es la aplicación Angular 2 que tiene algunos problemas con el data binding de Material angular 2 y necesita llamar a setTimeout zonificado como una solución temporal pero instantánea, antes de que el problema se setTimeout correctamente.

Creo que necesita aprovechar NgZone y su método runOutsideAngular para esto. Aquí hay una muestra:

 constructor(private ngZone:NgZone) { } setTimeout(() => { this.ngZone.runOutsideAngular(() => { // do something }); }, 1000); 

Agregando a la respuesta, los methods originales se pueden alcanzar con el prefijo __zone_symbol__ , a partir de Zone.js 0.6.12 (puede estar sujeto a cambios).

Es decir, la window.__zone_symbol__setTimeout , etc.

sí, básicamente el método nativo puede ser accedido por

 target[Zone['__symbol__'](methodName)] 

o destino [' zone_symbol ' methodName]

como

 window['__zone_symbol__setTimeout'] 

y puedes acceder a NativePromise haciendo

 window['__zone_symbol__Promise'] 

Haré una list más tarde.

También deberías ocuparte de Promise :: then

Implementé las siguientes funciones de utilidades en mi proyecto

 function jb_new_NativePromise(cb) { if (window && window.__zone_symbol__Promise) { var res = new __zone_symbol__Promise(cb); res.then = res.__zone_symbol__then; return res; } return new Promise(cb); } function jb_NativePromise_resolve(obj) { return jb_new_NativePromise(resolve=>resolve(obj)) } function jb_native_delay(ms) { var set_timeout = window && window.__zone_symbol__setTimeout || setTimeout; return jb_new_NativePromise(resolve => set_timeout(resolve, ms)); }