【问题标题】:Subscribing for particular form control value changes from a list of form control Angular 2从表单控件Angular 2列表中订阅特定的表单控件值更改
【发布时间】:2018-06-02 21:31:18
【问题描述】:

我有一个表单,其中有一些字段,例如字段 A、字段 B、字段 C、字段 D 和许多其他字段。用户可以根据需要创建我的字段。但我只想订阅字段 A 和字段 B 的值更改。我尝试在整个表单上使用 valuechange,它工作正常,但是当表单很大时,订阅整个表单的 valuechange 是昂贵的。所以有没有办法选择性地订阅表单控件数组。这是我想要的/p>

this.form.subscribe(value => { 
valueA = this.form.get('fieldA').value;
valueB = this.form.get('fieldB').value
})
,但这是昂贵的。任何帮助表示赞赏

谢谢

【问题讨论】:

    标签: angular angular-forms


    【解决方案1】:

    使用 Angular 自定义 NgModel 更好,您可以定义模型对象或变量并将其分配给您的输入,如下所示:

    prenom: string= 'John';
    
    
    <input [(ngModel)]="prenom">
    

    【讨论】:

    • 该字段是动态创建的。我检查一下字段 A 和字段 B 是否存在。然后想从动态创建的字段列表中订阅值更改
    • 好的,所以最好的方法是使用 FormBuilder 和 Validators。这篇文章可以帮到你:angular.io/docs/ts/latest/cookbook/form-validation.html
    • 有没有办法在this.form.get方法中传递formcontrolname数组
    【解决方案2】:

    对于反应式表单

    debounceTime 将在给定毫秒后进行订阅。 如果不需要,请忽略。

    distinctUntilChanged 将仅在实际值更改时强制订阅。 如果不需要,请忽略。

    ngOnInit(){
         this.form.controls['form_control_name']
                    .valueChanges
                    .debounceTime(MilliSeconds)
                    .distinctUntilChanged()
                    .subscribe(val => {
    
                      });
    }
    

    您只需订阅所需控件的值更改。对于两个控件,用作:

      this.form.controls['fieldA']...
       this.form.controls['fieldB']...
    

    【讨论】:

      猜你喜欢
      • 2018-06-04
      • 2019-10-30
      • 2021-01-13
      • 2017-03-31
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 2016-09-18
      相关资源
      最近更新 更多