2016-08-05 7 views
-1

私のangular2アプリケーションでは、私はサブスクライブするコールバック関数を持っています。それは単にすべてのkeyupイベントが私ので起こる印刷する必要があります。私は確かに、rxjsモジュールを正しくインストールしました。サブスクライブのコールバック関数が機能しません

import {Component} from 'angular2/core'; 
import {Observable} from 'rxjs/Rx'; 


@Component({ 
    selector: 'my-app', 
    template: ` 
      <input id="search" type="text" class="form-control"> 
     ` 

}) 

export class AppComponent { 

    constructor(){ 

     var keyups= Observable.fromEvent($("#search"),"keyup"); 
     keyups.subscribe(data => console.log(data)); 
    } 
} 

私は何も私のコンソールに表示されていないボタンを押したときに問題が次のとおりです。ここで

コードがあります。 何が間違っていますか?それはコンストラクタで実行され、ngAfterViewInit()が呼び出されたときに要素にのみ存在するため、

+0

なぜAngular2アプリでjQueryを使用していますか? 'fromEvent'への最初のオブジェクトとしていくつかの突然変異jQueryオブジェクトを渡すことはできません。私はそれがコンパイルされても驚いています。 –

+0

アプリケーション内のすべての演算子を使いたい場合を除き、rxjs/Rxからインポートすることは稀です。 – LookForAngular

答えて

0
$("#search") 

は、要素を見つけることができません。

これは動作するはずです:

export class AppComponent { 

    ngAfterViewInit(){ 

     var keyups= Observable.fromEvent($("#search"),"keyup"); 
     keyups.subscribe(data => console.log(data)); 
    } 
} 
+0

探していないときに 'fromEvent'がjQueryオブジェクトを取るように手配しましたか? –

+0

jQueryについて知りません。 –

+0

しかし、少なくとも '$'が 'getElementById'のエイリアスではなくjQueryであると仮定して、"これはうまくいくはずです "と言ったコード部分で使用しました。 –

0

あなたはこの

<input id="search" type="text" class="form-control" (keyup)="onKey($event)"> 

のようなテンプレートでkeyupイベントにサブスクライブし、次のように値を印刷することができます:

 onKey(event:any) { 
      console.log(event.target.value); 
     } 
+0

彼は、キーアップをバウンスのようなクールなものにするストリームとして扱いたいと思うなら、できるはずです。あなたのコードはうまくいくと思いますが、コードには何が問題なのですか? –

0

より良いですこの問題を解決する方法は、JQuery宣言の代わりに@ViewChildを使用しています。

import { AfterViewInit, Component, ViewChild, ElementRef } from '@angular/core'; 
import { Observable } from 'rxjs/Rx' 
@Component({ 
selector: 'my-app', 
template:` 
    <input #search type="text" class="form-control" > 
` 
}) 
export class AppComponent { 

@ViewChild('search') input: ElementRef 

ngAfterContentInit() { 
    var keyups = Observable.fromEvent(this.input.nativeElement, "keyup"); 
    keyups.subscribe(data => console.log(data)); 
} 
関連する問題