From 8900811f1d79b64d5e14d6abf6e8a33e5c6f2430 Mon Sep 17 00:00:00 2001 From: tchunwei Date: Thu, 6 Jul 2017 15:29:49 +0800 Subject: [PATCH] Use NgZone to improve performance Move initialization code to run outside angular using NgZone to improve performance. Or else ngDoCheck() of parent component will be kept triggered continuously. --- src/codemirror.component.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/codemirror.component.ts b/src/codemirror.component.ts index 68d39f2..47f21f0 100644 --- a/src/codemirror.component.ts +++ b/src/codemirror.component.ts @@ -9,6 +9,7 @@ import { forwardRef, AfterViewInit, OnDestroy, + NgZone } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import * as CodeMirror from 'codemirror'; @@ -46,7 +47,7 @@ export class CodemirrorComponent implements AfterViewInit, OnDestroy { /** * Constructor */ - constructor() {} + constructor(private _zone: NgZone) {} get value() { return this._value; } @@ -76,8 +77,10 @@ export class CodemirrorComponent implements AfterViewInit, OnDestroy { * Initialize codemirror */ codemirrorInit(config) { - this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config); - this.instance.setValue(this._value); + this._zone.runOutsideAngular(() => { + this.instance = CodeMirror.fromTextArea(this.host.nativeElement, config); + this.instance.setValue(this._value); + }); this.instance.on('change', () => { this.updateValue(this.instance.getValue());