2017年04月23日

angularでdebounce

以下のようにnew Subjectでオブジェクトを作成しておいて、debounceTimeを設定するとデバウンスができる

import { Component,HostListener } from '@angular/core';
import {Subject} from 'rxjs/Subject'
import 'rxjs/Rx'

@Component({
selector: 'app-root',
template: `
<input (input)="subject.next($event.target.value)">
`,
})

export class AppComponent {
subject = new Subject();
constructor() {
this.subject.debounceTime(1000).subscribe((v) => {
console.log(v);
})
}
}


ただ、このままだとChange Detectionのdebounceができないので以下のように調整する

@Directive({
selector: 'input[debounceInput]'
})
export class DebounceInput {
@Output() onInput = new EventEmitter();

constructor(
private _elementRef: ElementRef,
private _zone: NgZone,
) {
this._zone.runOutsideAngular(() => {
Observable
.fromEvent(this._elementRef.nativeElement, 'input')
.debounceTime(1000)
.subscribe((ev:any) => {
this._zone.run(() => this.onInput.emit(ev));
});
});
}
}


参考:Angularでイベントから無駄にChange Detectionを走らせないためにすべきこと - Qiita
タグ:RxJS
posted by ねこまんま at 20:41 | Comment(0) | TrackBack(0) | Ajax | 更新情報をチェックする

angular cliで作ったプロジェクトでJSエラーが出る

Angular CLIでつくったプロジェクトを表示すると以下のようなエラーがでた。

Uncaught TypeError: Cannot read property 'apply' of undefined
at XMLHttpRequest.desc.get [as ontimeout] (zone.js:1265)
at XHRLocalObject.AbstractXHRObject._cleanup (abstract-xhr.js:149)
at XMLHttpRequest.xhr.onreadystatechange (abstract-xhr.js:125)
at XMLHttpRequest.wrapFn (zone.js:1230)
at ZoneDelegate.invokeTask (zone.js:398)
at Zone.runTask (zone.js:165)
at XMLHttpRequest.ZoneTask.invoke (zone.js:460)


以下のコマンドでzone.js@0.8.5をインストールしておけばよいです

npm install zone.js@0.8.5 --save


参考:html - Angular 2 - TypeError: Cannot read property 'apply' of undefined - Stack Overflow
posted by ねこまんま at 19:29 | Comment(0) | TrackBack(0) | Angular | 更新情報をチェックする

2017年04月06日

Angular2でformControl' since it isn't a known property of 'input'とエラーが出た

Angular2でformControlを利用しようとすると「formControl' since it isn't a known property of 'input'」とエラーが出た。

ReactiveFormsModuleモジュールを読み込んでないと使えないらしい。

import {ReactiveFormsModule} from '@angular/forms';

@NgModule({
imports : [
..
ReactiveFormsModule,
...
],
...
})
posted by ねこまんま at 14:07 | Comment(0) | TrackBack(0) | Angular | 更新情報をチェックする