我正在尝试在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>
请有人指出我在这里失踪了吗?感谢
答案 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
。
答案 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);
});
}