src/app/counter/counter.component.ts
selector | zone-counter |
styleUrls | counter.component.css |
templateUrl | ./counter.component.html |
constructor(_ngZone: NgZone)
|
Defined in src/app/counter/counter.component.ts:12
|
init |
init()
|
Defined in src/app/counter/counter.component.ts:19
|
Función que lanza el contador. Incrementa campo cada seg
Returns:
void
|
enterNgZone |
enterNgZone()
|
Defined in src/app/counter/counter.component.ts:30
|
Mete en la ngZone la función contador, con lo que se renderizará, el ctrol de cambios del ctx actuará
Returns:
void
|
exitNgZone |
exitNgZone()
|
Defined in src/app/counter/counter.component.ts:42
|
Saca de la ngZone la función contador, con lo que ya no se renderizará
Returns:
void
|
stop |
stop()
|
Defined in src/app/counter/counter.component.ts:51
|
Finaliza el intervalo
Returns:
void
|
contador |
contador: |
Default value: 0
|
Defined in src/app/counter/counter.component.ts:10
|
interval |
interval: |
Defined in src/app/counter/counter.component.ts:11
|
zone |
zone: |
Default value: dentro
|
Defined in src/app/counter/counter.component.ts:12
|
import { Component, NgZone } from '@angular/core';
@Component({
selector: 'zone-counter',
templateUrl: './counter.component.html',
styleUrls: ['./counter.component.css']
})
export class CounterComponent {
contador= 0;
interval: number;
zone = 'dentro';
constructor(private _ngZone: NgZone) {}
/**
* Función que lanza el contador. Incrementa campo cada seg
* @memberOf CounterComponent
*/
init() {
// Limpia interval activo
window.clearInterval(this.interval);
this.interval = window.setInterval(() => {this.contador++; } , 500);
}
/**
* Mete en la ngZone la función contador, con lo que se renderizará, el ctrol de cambios del ctx actuará
* el campo en la vista cada ciclo.
* @memberOf CounterComponent
*/
enterNgZone () {
this.zone = 'dentro';
this._ngZone.run (() => this.init());
}
/**
* Saca de la ngZone la función contador, con lo que ya no se renderizará
* el campo en la vista cada ciclo. No obstante la vble se sigue incrementando.
* Al volver a entrar en la zona se hará un binding del valor actual del contador a
* la vista
* @memberOf CounterComponent
*/
exitNgZone () {
this.zone = 'fuera';
this._ngZone.runOutsideAngular(() => this.init());
}
/**
* Finaliza el intervalo
* @memberOf CounterComponent
*/
stop () {
this.zone = 'dentro';
window.clearInterval(this.interval);
this.contador = 0;
}
}
<section class="counter">
<div class="contenido">
<span class="big red">{{contador}}</span>
<span class='green'> Estamos {{zone}} de ngZone</span>
<span class='red' *ngIf="zone == 'fuera'">, el contador se sigue incrementando pero no se renderiza</span>
</div>
<div class="opciones">
<a md-raised-button (click)="init()"><i class="material-icons">play_circle_outline</i>Init!</a>
<a md-raised-button (click)="stop()"><i class="material-icons">stop</i>Reset!</a>
<a md-raised-button (click)="exitNgZone()"><i class="material-icons">open_in_new</i>Salir de ngZone</a>
<a md-raised-button (click)="enterNgZone()"><i class="material-icons">open_in_browser</i>Entrar de ngZone</a>
</div>
</section>