Angular 角度-2可观测不';行不通
下面的代码应该记录keyup事件中的数据,这些数据取自一个输入字段,但不会发生任何事情,控制台保持空白(也没有错误)Angular 角度-2可观测不';行不通,angular,observable,Angular,Observable,下面的代码应该记录keyup事件中的数据,这些数据取自一个输入字段,但不会发生任何事情,控制台保持空白(也没有错误) // 从'angular2/core'导入{Component}; 从“rxjs/Rx”导入{Observable}; @组成部分({ 选择器:“我的应用程序”, 模板:` ` }) 导出类AppComponent{ 构造函数(){ var keyups=可观察的。fromEvent($(“#搜索”),“keyup”); subscribe(数据=>console.log(数据)
//
从'angular2/core'导入{Component};
从“rxjs/Rx”导入{Observable};
@组成部分({
选择器:“我的应用程序”,
模板:`
`
})
导出类AppComponent{
构造函数(){
var keyups=可观察的。fromEvent($(“#搜索”),“keyup”);
subscribe(数据=>console.log(数据));
}
}
您的代码有几个问题
1) Observable.fromEvent
期望HTML元素作为第一个参数,但是您正在传递jQuery实例
2) 。您正在尝试在构造函数中订阅,但该构造函数不能保证组件内容将在该时间加载
3) 。您使用硬编码的CSS选择器#search
,这是您永远不应该使用的
现在,您可以通过以下方式进行修复:
ngAfterContentInit
hook中初始化可观察的fromEvent
:@组件({
选择器:“我的应用程序”,
模板:`
`
})
导出类AppComponent{
@ViewChild(“搜索”)输入:ElementRef
ngAfterContentInit(){
var keyups=可观察的.fromEvent(this.input.nativeElement,“keyup”);
subscribe(数据=>console.log(数据));
}
}
演示:当使用核心角度2可以实现同样的效果时,为什么要使用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);
}
}
//我们的根应用程序组件
从“@angular/core”导入{Component,Pipe,ViewChild};
从'app/service'导入{myservice};
@组成部分({
选择器:“我的应用程序”,
模板:`
角2
{{values}}
`,
})
导出类AppComponent{
值=“”;
onKey(值:字符串、事件){
this.values+=value+'|';
console.log(事件);
}
}
官方文档:当我使用jquerySelector时,我正在处理一个类似的项目,@ViewChild函数没有找到元素。我将其更改为声明式方式:#搜索成功了
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(数据));
}
@ViewChild('search'))输入:ElementRef;有红色错误提示。我应该导入顶部的内容吗?您检查演示了吗?您需要从@angular/core导入ElementRef
。是的,现在可以了,谢谢。但这不是我想要的确切输出。我想记录整个输入值,不带字母分隔。keyups.subscribe(data=>console.log(数据.目标.价值)
?它确实有效,谢谢。但我想记录整个输入值,不带字母分隔。你能告诉我这是什么意思吗?将jQuery与angular2一起使用就像是在2009年有一只脚,在2016年有一只脚。您好,欢迎来到StackOverflow。您能分享其他信息吗?为什么您的答案有效,以及与之不同的是什么这个问题。这将改善它!