首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular-2观察值不工作

Angular-2观察值不工作
EN

Stack Overflow用户
提问于 2016-07-17 17:11:34
回答 3查看 658关注 0票数 4

下面的代码应该记录来自keyup event的数据,这些数据来自一个输入字段,但是没有发生任何事情,并且console保持为空(也没有错误)。

代码语言:javascript
复制
/// <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));
    }
}
EN

回答 3

Stack Overflow用户

发布于 2016-07-17 17:22:14

你的代码有几个问题。

1)。Observable.fromEvent希望HTML元素作为第一个参数,但您传递的是jQuery实例。

2)。您正在尝试在构造函数中进行订阅,该构造函数不能保证组件内容将在那个时候加载。

3)。你使用硬编码的CSS选择器#search,这是你永远不应该做的。

现在,这是你可以修复它的方法:

在钩子中设置对input field.

  • Initialize Observable.fromEvent
  1. 模板引用:

代码语言:javascript
复制
@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));
  }
}

演示: http://plnkr.co/edit/5TFDv0OoV8wWnDYneiFD?p=preview

票数 5
EN

Stack Overflow用户

发布于 2016-07-17 17:34:22

既然核心angular2也可以实现同样的功能,为什么还要使用Rxjs中的observable

代码语言:javascript
复制
//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

票数 0
EN

Stack Overflow用户

发布于 2017-06-27 00:56:36

我正在做一个类似的项目,当我使用jquerySelector时,@ViewChild函数找不到元素。我把它改为声明式的方式:#search,它起作用了。

代码语言:javascript
复制
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));
}  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38419633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档