Angular 2 como evitar que o evento acione o ciclo de detecção / loop de digestão?

Estamos implementando a funcionalidade de arrastar e soltar com o Angular 2.

Estou usando odragover evento apenas para executar opreventDefault() função. Para que odrop evento funciona como explicado emessa questão.

odragover O método está sendo tratado peloonDragOver função no componente.

<div draggable="true"
    (dragover)="onDragOver($event)">
...

No componente, essa função evita o comportamento padrão, permitindo que o item arrastado seja solto nesse destino.

onDragOver(event) {
    event.preventDefault();
}

Isso funciona como esperado. O evento dragover é disparado a cada algumas centenas de milissegundos.

Mas, toda vez que oonDragOver é chamada, Angular 2 executa seu ciclo de digestão. Isso diminui a velocidade do aplicativo. Eu gostaria de executar esta função sem acionar o ciclo de digestão.

Uma solução alternativa que usamos para isso é assinar o evento do elemento e executá-lo fora do contexto do Angular 2 da seguinte maneira:

constructor( ele: ElementRef, private ngZone: NgZone ) {
    this.ngZone.runOutsideAngular( () => {
        Observable.fromEvent(ele.nativeElement, "dragover")
            .subscribe( (event: Event) => {
                event.preventDefault();
            }
        );
    });
}

Isso funciona bem. Mas existe uma maneira de conseguir isso sem precisar acessar diretamente o nativeElement?

questionAnswers(2)

yourAnswerToTheQuestion