Angular subscribe中的回调函数不起作用
在我的angular2应用程序中,我有一个回拨功能可以订阅。它应该只打印我的Angular subscribe中的回调函数不起作用,angular,Angular,在我的angular2应用程序中,我有一个回拨功能可以订阅。它应该只打印我的DOM中发生的每个keyup事件。我确信,我已经正确安装了rxjs模块 代码如下: import {Component} from 'angular2/core'; import {Observable} from 'rxjs/Rx'; @Component({ selector: 'my-app', template: ` <input id="search" type
DOM
中发生的每个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));
}
}
从'angular2/core'导入{Component};
从'rxjs/Rx'导入{Observable};
@组成部分({
选择器:“我的应用程序”,
模板:`
`
})
导出类AppComponent{
构造函数(){
var keyups=可观察的。fromEvent($(“#搜索”),“keyup”);
subscribe(数据=>console.log(数据));
}
}
问题是当我按下按钮时,控制台中没有显示任何内容。
那怎么了
$("#search")
找不到元素,因为它在构造函数中执行,并且该元素仅在调用ngAfterViewInit()
时存在
这应该起作用:
export class AppComponent {
ngAfterViewInit(){
var keyups= Observable.fromEvent($("#search"),"keyup");
keyups.subscribe(data => console.log(data));
}
}
您可以像这样在模板中订阅
keyup
事件
<input id="search" type="text" class="form-control" (keyup)="onKey($event)">
解决此问题的更好方法是使用@ViewChild而不是JQuery声明
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));
}
从'@angular/core'导入{AfterViewInit,Component,ViewChild,ElementRef};
从'rxjs/Rx'导入{Observable}
@组成部分({
选择器:“我的应用程序”,
模板:`
`
})
导出类AppComponent{
@ViewChild(“搜索”)输入:ElementRef
ngAfterContentInit(){
var keyups=可观察的.fromEvent(this.input.nativeElement,“keyup”);
subscribe(数据=>console.log(数据));
}
为什么要在Angular2应用程序中使用jQuery?将一些变异的jQuery对象作为第一个对象传递给fromEvent
将不起作用;我很惊讶它甚至可以编译。请注意,很少从rxjs/Rx导入,除非你想在应用程序中使用所有运算符。如果他想将keyup视为流,那就让他这么做吧很多很酷的东西,比如去Bouncing,他应该可以。我相信你的代码会工作,但是他的代码有什么问题吗?有人安排了fromEvent
在我不看的时候获取jQuery对象吗?我不知道jQuery。但是你在代码片段中使用了它,你说“这应该工作”,至少假设他的$
是jQuery,而不是getElementById
的别名。我只是从他的问题中复制了它,并为我纠正了一个明显的错误,即代码是在构造函数中执行的,而不是在ngAfterViewInit
中执行的。Kamyar接受了这个答案似乎表明这对他有效;-)
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));
}