2017-02-25 10 views
7

Observableを購読しようとすると奇妙なエラーが発生します。私はコンソールに入るエラーがあるAngular 2 - Observable.fromEventに登録中エラー:「無効なイベントターゲット」

import {Component, Input, OnInit, ViewChild} from '@angular/core'; 
 
import Rx from 'rxjs/Rx'; 
 

 
@Component({ 
 
    selector: 'action-overview-description', 
 
    template: require('./actionOverviewDescription.html') 
 
}) 
 
export class ActionOverviewDescription { 
 
    @ViewChild('button') button; 
 

 
    constructor() {} 
 
    
 
    ngOnInit() { 
 

 
    let buttonStream$ = Rx.Observable.fromEvent(this.button, 'click') 
 
     .subscribe(res => console.log(res)); 
 

 
    } 
 
}
<button #input>Button</button>

Invalid event target

エラーONLYここで

は、問題を提示したコードの骨抜きバージョンですストリームを購読すると表示されます。私はそれを作成するが、購読しない場合、エラーはありません。私はそれが購読メンバーを持っているようだと私はconsole.logストリーム。

私はエラーをグーグルで試してみましたが、どこにも説明されていないようです。

私はRxjs 4.0.5(npm rxjs --versionによる)を使用していると思います。

+0

は、あなたが同様に私達にあなたのhtmlコードを表示することができます:

は、次のコードを試してみてもらえますか? – codeepic

+1

'ngAfterViewInit' –

+0

私はngAfterViewInitを試しています。それは違いを生じさせるようではありません。あなたが見たいHTMLの特定の部分はありますか?テンプレートは ""に簡略化されています – deafdigit

答えて

16

問題は、使用しているライフサイクルフックです。 ngOnInitが呼び出されたとき、要素はまだDOMに作成されていません。代わりにngAfterViewInitを使用してください。

import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/observable/fromEvent'; 

@Component({ 
    template: '<button #input>Button</button>' 
}) 
export class ActionOverviewDescription implements AfterViewInit { 
    @ViewChild('input') button: ElementRef; 

    ngAfterViewInit() { 
    let buttonStream$ = Observable.fromEvent(this.button.nativeElement, 'click') 
     .subscribe(res => console.log(res)); 

    } 
} 
+0

しばらくお待ちになってからOK!私はエラーがRxjsのものをインポートした方法であると思う。おそらく欠落している "import 'rxjs/add/observable/fromEvent'ですが、これはあまり意味のないエラーメッセージですが、ElementRefが廃止されたという印象を受けました。あなたはAngularFranceに答えを返します。 – deafdigit

+0

Ok、good。:) ElementRefは[APIでは安定しているとマークされています](https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html)私はあなたのコードの主なエラーは 'this.buttonを対象としていたと思います'vs' this.button.nativeElement'。 – AngularChef

+2

これは私のためには機能しませんでした。タイプとしてボタンを定義することになりました:any、Observable.fromEvent(this.button._elementRef.nativeElement、 'click')を使用しました。 Ionic 3プロジェクトの文脈の中で、それはカバーの下にAngular 4を使用します。.. – JGFMK

関連する問題