以编程方式更新实现ControlValueAccessor的控件的值

时间:2016-10-19 15:52:36

标签: angular controls

我有一个带有“填充表单”按钮的表单,用于设置其模型属性。 模型绑定似乎工作正常但是当我单击按钮时,实现ControlValueAccessor的控件在我聚焦并模糊它们之前不会得到它们的值。

如果控件是纯HTML输入,则可以立即看到模型更改。 如果我设置了一个自定义控件,那么在我点击它们之前它们不会反映出它们的变化......

任何线索?

我使用角度2决赛。

此代码显示值,即表单创建后的值     ngOnInit(){

    super.ngOnInit();
    this.form = this.formBuilder.group({
        myfield: ['', ]
    })

    this.myfield= this.form.controls['myfield'];

    ...

    this.obs.push(this.route.params.subscribe(params => {
        if (params['myparam']) {
            this.model.myfield= params['tper_Codigo'];
            this.dataservice.get("miEntity", this.model).subscribe(somedata => {
                this.model = somedata;                   
            });
        }
    }));

此代码不

someClick() {
    //trying all sort of methods
    this.model = { myfield : 'aaaa'};
    this.form.patchValue({ myfield : 'bbbbb' });
    (<FormControl>this.form.controls['myfield']).updateValueAndValidity();
    (<FormControl>this.form.controls['myfield']).patchValue('cccc');

}

正如我之前所说的......如果我点击并模糊元素,所有上述方法都会反映该值,因此设置的值,直到模糊才会显示

2 个答案:

答案 0 :(得分:1)

我最终重写了我的控制值访问器,更像是角度团队中的angular2 / material中的那个。 https://github.com/angular/material2/blob/master/src/lib/input/input.ts

我强烈建议使用这些组件作为控制构建的最终参考(我说控制区分“组件”的gtom“视图”并参考单片ui基础控件)。任何其他例子都不足。我还建议看一些其他项目也将这些控件作为“灵感”,例如http://code.promactinfo.com/md2/

非常有帮助,有效的东西

感谢所有人!

答案 1 :(得分:0)

您可以使用setValue()函数来更新控件值。您可以查看api doc