我应该在窗体控件上使用`registerOnChange`或`valueChanges`

Max*_*kyi 10 angular2-forms angular

似乎我可以使用registerOnChangevalueChanges方法监听控件的更改.我很困惑何时使用什么.valueChanges返回可观察的,因此使用它是有意义的,因为它提供了许多方便的方法.什么时候用registerOnChange呢?

Rad*_*ler 8

registerOnChange是专门为FormControl.有一个源链接:

export class FormControl extends AbstractControl {
    ...
    /**
    * Register a listener for change events.
    */
   registerOnChange(fn: Function): void { this._onChange.push(fn); }
Run Code Online (Sandbox Code Playgroud)

它允许传递许多侦听器,但它似乎并不打算作为标准方式(对于所有控件),使用标准观察者(无法如何处置该侦听器)

还有就是在链接valueChangesAbsractControl

export abstract class AbstractControl {
    ...
    /**
     * Emits an event every time the value of the control changes, in
     * the UI or programmatically.
     */
    get valueChanges(): Observable<any> { return this._valueChanges; }
Run Code Online (Sandbox Code Playgroud)

这意味着 - 按照标准的Observable模式,为所有人做好准备controls.这是一种首选方式

  • 是的..检查[statusChanges](https://github.com/angular/angular/blob/master/modules/%40angular/forms/src/model.ts#L208)...它通过状态值,如果` DISABLED` 来了.. 我们可以做你的事 (2认同)

Gün*_*uer 5

registerOnChange主要供内部使用(AFAIR 由CONTROL_VALUE_ACCESSOR并且只允许单个订阅者使用) - 因此绝对使用valueChanges