valueChanges尝试抛出对象为空的错误(反应形式)

时间:2018-04-25 01:59:04

标签: angular angular-reactive-forms

Angular 4问题。

我试图破解角度的反应形式的某些部分,更具体地说,与被动反应的形式相关,响应用户动作。

我想尝试对用户输入执行操作,即从建议列表中进行选择。

所以在构造函数中我有formBuilder和帮助我构建值的服务,我从中为我的输入字段选择一个值。

问题是,当我想玩valueChanges时,为了捕获我输入的值并用它做一些事情,我得到一个'对象可能是空的'即使我采取了一些防止对象为空的预防措施,也会出错。

例如:额外的条件,在此之前,实际上在initForm中定义了myForm(所以肯定它不能为空)。

请快速指点,谢谢!

  constructor(private formBuilder: FormBuilder, private myService: MyService) {
  }

  ngOnInit() {
    this.initForm(this.formBuilder);
  }


 private initForm(formBuilder: FormBuilder): void {
    this.myForm = formBuilder.group({
      input1: ['', Validators.minLength(3)],
      input2: [{value: '', disabled: true}]
     });

    if (this.myForm) {
      if (this.myForm.get('input1')) {
        this.myForm.get('input1').valueChanges.subscribe(value => console.log(value));
        }
    }

  }

2 个答案:

答案 0 :(得分:1)

也许你应该这样做

let input1 = this.myForm.get('input1');
if (input1 != null) {
    input1.valueChanges.subscribe(value => console.log(value));
}

答案 1 :(得分:1)

 if (this.myForm) {
      if (this.myForm.get('input1')) {
       const variable = this.myForm.get('input1'); // create a variable 
        variable!.valueChanges.subscribe(value => console.log(value)); // use Non-null assertion operator(used in Typescript 2)
        }
    }

因为编译器不能告诉事实,那个变量是null,我们需要使用一个非空的断言operator.assert,它的操作数是非空的和非未定义的。