以下代码应记录来自输入字段的keyup事件中的数据,但没有任何反应并且控制台保持空白(也没有错误)。
/// <reference path="../typings/tsd.d.ts" />
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));
}
}
答案 0 :(得分:5)
您的代码存在一些问题。
1)。 Observable.fromEvent
期望HTML元素作为第一个参数,但是你传递的是jQuery实例。
2)。您正在尝试在构造函数中进行订阅,这不能保证在那时加载组件内容。
3)。您使用硬编码的CSS选择器#search
,这是您永远不应该做的。
现在,您可以通过以下方式解决问题:
将模板引用设置为输入字段。
在Observable.fromEvent
hook中初始化ngAfterContentInit
:
@Component({
selector: 'my-app',
template: `
<div>
<input #search type="text" class="form-control">
</div>
`
})
export class AppComponent {
@ViewChild('search') input: ElementRef
ngAfterContentInit() {
var keyups = Observable.fromEvent(this.input.nativeElement, "keyup");
keyups.subscribe(data => console.log(data));
}
}
答案 1 :(得分:0)
为什么在使用核心angular2 时可以使用 Rxjs 中的可观察?
//our root app component
import {Component, Pipe,ViewChild} from '@angular/core';
import {myservice} from 'app/service';
@Component({
selector: 'my-app',
template: `
<h1>angular2</h1>
<input #box (keyup)="onKey(box.value,$event)">
<p>{{values}}</p>
`,
})
export class AppComponent {
values = '';
onKey(value: string,event) {
this.values += value + ' | ';
console.log(event);
}
}
https://plnkr.co/edit/ZSqLNhSi0lI4HdKhulBf?p=preview
官方文件:https://angular.io/docs/ts/latest/guide/user-input.html
答案 2 :(得分:0)
当我使用jquerySelector时,我正在研究一个类似的项目,@ ViewChild函数没有找到该元素。我以声明的方式更改了它:#search并且它有效。
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));
}