Obularable事件在Angular2

时间:2016-05-31 22:11:28

标签: javascript html typescript angular

我正在尝试在angular2中创建一个Keyup事件,当在搜索框中输入某些内容时会触发该事件,然后在控制台中记录该事件。如果控制台中没有显示任何内容。这是我的app.component.ts文件

/// <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>

请有人指出我在这里失踪了吗?感谢

3 个答案:

答案 0 :(得分:4)

首先,你可以用另一种方式捕捉按键:

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

这会将keyup事件绑定到运行您为该事件绑定分配的内容。然后,您可以使用onKeyPress在您的组件中添加console.log功能。

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

另一件事是构造函数在初始化视图之前运行。因此,如果您坚持绑定到模板之外的事件,则可以执行以下操作:

export class AppComponent implements AfterViewInit

在可以使用Observable的组件中实现ngAfterViewInit函数。请务必从AfterViewInit导入@angular/core

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

答案 1 :(得分:2)

您需要将事件绑定到输入字段并将输入字段绑定到对象,以角度方式执行。

<强> HTML:

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

然后在您的支持 TS类

public model: Object = {};

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

angular中的双向绑定将自动将输入值绑定到model.name(keyup)事件将侦听您想要的事件。

答案 2 :(得分:2)

您还没有在构造函数中访问DOM,因此您实际上正在初始化该观察者以在keyup项上侦听null事件。您需要做的是在ngAfterViewInit生命周期钩子中初始化该观察者。

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

    keyups.subscribe(function(data) {
        console.log(data);
    });
}