2

基于 David East 教程(https://gist.github.com/davideast/0b7efc93e0ba9aaa446e),我试图让 Angular2 可观察到处理非常小的表单示例。

基本上,我希望每次输入值发生变化时,我的观察者都会触发并捕获一些事件。但由于某些奇怪的原因,我的代码不起作用......

lib 版本:typescript 1.5.0-beta、Angular-2.0.0-28

这是打字稿代码:

/// <reference path="../../typings/angular2/angular2.d.ts" />
/// <reference path="../../typings/angular2/angular2_addons.d.ts" />
import {Component, View, bootstrap, Form, EventEmitter} from 'angular2/angular2';
import {FormBuilder, Validators, formDirectives, ControlGroup} from 'angular2/forms';
import {Inject} from 'angular2/di';

@Component({
  selector: 'mycmp',
  appInjector: [FormBuilder]
})
@View({
  template: '<form [ng-form-model]="myForm"><input type="text" ng-control="myText">{{myForm.controls.myText.value}}</form>',
  directives: [formDirectives],
})
export class MyCmp {
  myForm:ControlGroup;
  constructor(@Inject(FormBuilder) builder:FormBuilder) {
    this.myForm = builder.group({
        myText: ["someDefaultVal...", Validators.required]
    });

    this.myForm.controls.myText.valueChanges.subscribe(function (value) {
        console.log("changed value=" + value);
    }.bind(this));
  }
}

bootstrap(MyCmp);

不幸的是我得到TypeError: this.myForm.controls.myText.valueChanges.subscribe is not a function

4

3 回答 3

3

这篇博客文章解释了的双向绑定方法和Angular 2 表单中的新反应方法之间的区别。对于后者,它适用于某些form.valueChanges流,如下所示:

this.form.valueChanges
  .map((value) => {
      value.firstName = value.firstName.toUpperCase();
      return value;
  })
  .filter((value) => this.form.valid)
  .subscribe((value) => {
     console.log("Model Driven Form valid value: vm = " + JSON.stringify(value));
  });
于 2016-04-05T00:21:27.663 回答
1

我找不到任何订阅者功能,所以我使用了观察者:

this.myForm.valueChanges.observer({next: (value) => this.address = value});

在这种情况下,“this.address”是一个代表 myForm 数据的对象。

于 2015-07-10T14:53:15.173 回答
0

如果您只想在每次输入值更改时触发某个函数,那么您可以执行以下操作:

<input type="text" ng-control="myText" #mytext (keyup)="firechange($event,mytext)">

在你的组件中

firechange($event, field){
    console.log(field.value);
}

@Inject如果你已经使用appInject过(也就是说,顺便说一句,已经进入 alpha29 (https://github.com/angular/angular/blob/master/CHANGELOG.md#break-changes ),则不需要使用。它可以是只是:

constructor(builder: FormBuilder) {...}
于 2015-07-02T08:40:05.040 回答