2016-05-31 21 views
0

angle2でKeyupイベントを作成しようとしています。これは、検索ボックスに何かが入力されたときにトリガされ、イベントがコンソールに記録されます。コンソールには何も表示されません。これは私のapp.component.tsがObservableイベントがAngular2で動作しない

/// <reference path="../typings/tsd.d.ts" /> 

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

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

` 
}) 
export class AppComponent { 
constructor(){ 


    var keyups = Observable.fromEvent($("#search"), "keyup"); 


    keyups.subscribe(function(data) { 

     console.log(data); 
    }); 
}} 

をファイルであり、私のindex.htmlファイルは

<html> 
<head> 
<title>Angular 2 QuickStart</title> 
<meta charset="UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<link rel="stylesheet" href="styles.css"> 
<!-- Latest compiled and minified CSS --> 
<!-- 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous"> 
--> 

<link rel="stylesheet" href="app/bootstrap.min.css"> 
<link rel="stylesheet" href="app/styles.css"> 


<!-- 1. Load libraries --> 
<!-- Polyfill(s) for older browsers --> 
<script src="node_modules/es6-shim/es6-shim.min.js"></script> 
<script src="node_modules/zone.js/dist/zone.js"></script> 
<script src="node_modules/reflect-metadata/Reflect.js"></script> 
<script src="node_modules/systemjs/dist/system.src.js"></script> 

<script src="node_modules/rxjs/bundles/Rx.js"></script> 

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 
<!-- 2. Configure SystemJS --> 
<script src="systemjs.config.js"></script> 
<script> 
    System.import('app').catch(function(err){ console.error(err); }); 
</script> 
</head> 
<!-- 3. Display the application --> 
<body> 
<my-app>Loading...</my-app> 
</body> 
</html> 

で誰かが私がここで行方不明です何を指摘することができますか?ありがとう

答えて

4

まず、あなたは別の方法でキーの押下を捕捉して行くことができます。

<input (keyup)="onKeyPress()" id="search" type="text" class="form-control" placeholder="Search">

これは、バインディング、そのイベントに割り当てたものを実行するkeyupイベントをバインドします。 console.logを使用して、コンポーネントにonKeyPress関数を追加することができます。

https://angular.io/guide/template-syntax#event-binding

もう一つは、ビューが初期化される前に、コンストラクタが実行されることです。

export class AppComponent implements AfterViewInit

をそして、あなたはその観測を使用することができるコンポーネントでngAfterViewInit機能を実装する:あなたは、テンプレートの外のイベントへの結合を主張するのであれば、あなたはこれを行うことができます。 @angular/coreから必ずAfterViewInitをインポートしてください。あなたが実際にnull項目のkeyupイベントをリッスンすることオブザーバを初期化しているので、

https://angular.io/api/core/AfterViewInit

2

イベントを入力フィールドにバインドし、入力フィールドをオブジェクトにバインドする必要があります。

HTML:

<input type="text" (keyup)="someFunction()" [(ngModel)]="model.name" />

してからバッキングTSクラスに:

public model: Object = {}; 

public someFunction() { 
    console.log(model.name); 
} 

角度で結合2つの方法は、自動的にmodel.nameへの入力の値をバインドします、そして(keyup)イベントはあなたが望むイベントを待ち受けます。

2

あなたは、あなたのコンストラクタではまだDOMにアクセスすることはできません。あなたがする必要があるのは、そのオブザーバをngAfterViewInitライフサイクルフックで初期化することです。

ngAfterViewInit(){ 
    var keyups = Observable.fromEvent($("#search"), "keyup"); 

    keyups.subscribe(function(data) { 
     console.log(data); 
    }); 
} 
関連する問題