自定义ControlValueAccessor似乎不适用于我自己的FormControl指令

时间:2017-09-29 15:14:24

标签: angular angular2-forms angular2-directives

我正在尝试实现此answer,因为我一直在尝试创建自己的自定义FormControl,正如该问题中所详述的那样。

我创建了一个自定义ControlValueAccessor,并将其作为valueAccessor注入到我的FormControl指令的构造函数中,但是当我尝试使用registerOnChange注册回调时功能它永远不会被调用。

事实上,没有一个成员似乎被召唤。

我已经阅读了很多文章和博客文章,但无法解决我遗漏或做错的事情。

我已将plunkr从原始question扩展为演示here

任何帮助或指示都将不胜感激。

目标就像能够@Component({..., template: '<input myFormControl...'}...注册FormControls的另一个问题。

1 个答案:

答案 0 :(得分:0)

你快到了:)。还有一个技巧。

您的自定义NgControl未在setUpControl的{​​{1}}内调用ngOnChanges FormControlDirective。这是因为您的自定义控件的@Inputs未更改。此外,您不会在控件上使用任何输入。

但你可以手动运行它:

import { SimpleChange } from '@angular/core';

export class HybridFormControlDirective extends FormControlDirective   {
  /* @override */
  constructor(...) {
      super(validators, asyncValidators, valueAccessors);
      this.form = new FormControl('');
      this.form.patchValue('test2');

      // manually call ngOnChanges to make sure that setUpControl is called
      this.ngOnChanges({
        form: new SimpleChange(undefined, this.form, true)
      });
  }
}

<强> is called