禁用FormGroup不能按预期方式工作

时间:2018-09-07 09:47:19

标签: angular

初始化FormGroup并在FormGroup回调中禁用FormControlHttpClient.get时,FormGroup不会在HTML中禁用,但是{{ 1}}属性报告为disabled

请参见工作示例here

我可以通过如下方法将禁用的代码包装在超时中来解决此问题,但这是不希望的:

true

当不将setTimeout(() => { this.form.disable(); }); 设置为新实例时,它确实可以工作,但是我想将其设置为新实例。

重现此问题的最小示例:

FormGroup

enter image description here

3 个答案:

答案 0 :(得分:0)

对我来说,如果您只设置值而不是传递formGroup的整个新实例,那么它会起作用

values = df.groupby('node_i')['value_j'].transform('mean').fillna(1)
df['w'] = np.where(df['value_j'].notnull(),df['value_j'],values).astype(int)

df

    node_i  node_j  value_i value_j w
0   3       4       89      33.0    33
1   3       2       89      NaN     51
2   3       5       89      69.0    69
3   0       2       45      NaN     89
4   0       3       45      89.0    89
5   1       2       109     NaN     1
6   1       8       109     NaN     1

答案 1 :(得分:0)

您可以使用ChangeDetectorRef解决问题

这是一个例子

import { Component, OnInit, ChangeDetectorRef } from '@angular/core';

export class App implements OnInit {
    constructor(private personService: PersonService, readonly cd: ChangeDetectorRef) {}

  public onFetchPerson() {
    this.personService.fetchPerson().subscribe(() => {

      this.form = new FormGroup({
        firstName: new FormControl('John'),
        surname: new FormControl('Doe'),
      });
      this.cd.detectChanges();
      this.form.disable();
      console.log(this.form);
    });
  }
}

答案 2 :(得分:0)

我会使用FormBuilder,这是创建表单和添加验证的非常整洁的方式。

已经创建了表单,这使您可以修补(部分更新)表单。 要设置值,您需要在对象中具有所有属性。

  

FormBuilder提供了语法糖,可以缩短FormControl,FormGroup或FormArray的创建实例。它减少了构建复杂表格所需的样板数量。

From angular.io

Plunk here

trim_1