runOutsideAngular拖放一个drop,service和component

时间:2017-02-20 12:05:37

标签: angular drag-and-drop zone

我正在尝试通过拖放正确实施NgZone runOutsideAngular。在我的架构中,用户可以拖动列表中的元素并将其放在其他位置。在拖动时,我正在显示一个标记,其中元素将被删除。

enter image description here

我实现这个的方式(出于其他一些原因)是当用户拖动一个元素时,我在服务中写了一个对它的引用(没有解释所有不必要的细节,我存储代表该元素的模型)拖动的列表(不是dom元素)),呈现列表的组件将在拖动的元素上显示标记,从服务中读取引用。

现在我遇到了性能问题,我被告知要使用runOutsideAngular。我就是这样做的

这是我的拖放课程

class MyDragAndDropDirective {

    enableDrag() {
        this.zone.runOutsideAngular(() => {
            Observable.fromEvent(this.el, 'dragover').throttleTime(40).subscribe(e => this.onDragOver(<DragEvent> e));
      });
    });

    onDragOver(event: DragEvent) {
        event.preventDefault(); // [1]
        const pos = this.getDragPosition(event);
        this.dndService.setDraggedOverArticle(this.article, pos); // this is where is set the model to the service
    }
}

所以我所做的是将处理程序设置在Angular之外。在我看来,我应该在角度以外运行处理程序,但是,我仍然看到我的UI通过角度神奇地更新,我的表现并没有真正变得更好。似乎它并没有真正在Angular的消化周期之外运行。我也尝试将代码包装在onDragOver的{​​{1}}内,但没有区别。

0 个答案:

没有答案