Angular 角度形式控制值不改变';行不通

Angular 角度形式控制值不改变';行不通,angular,angular2-forms,angular2-formbuilder,Angular,Angular2 Forms,Angular2 Formbuilder,如果通过订阅更改了表单(“家庭”)值,我想获取其中一个表单(“家庭”)值,但似乎有点不对劲,因为我在控制台的日志中什么都没有 从'@angular/core'导入{Component,AfterViewInit}; 从'@angular/forms'导入{FormGroup,FormBuilder}; 从'rxjs/Rx'导入{Observable}; @组成部分({ 选择器:'应用程序根', 模板:` `, }) 导出类AppComponent实现AfterViewInit{ frm1:For

如果通过订阅更改了表单(“家庭”)值,我想获取其中一个表单(“家庭”)值,但似乎有点不对劲,因为我在控制台的日志中什么都没有

从'@angular/core'导入{Component,AfterViewInit};
从'@angular/forms'导入{FormGroup,FormBuilder};
从'rxjs/Rx'导入{Observable};
@组成部分({
选择器:'应用程序根',
模板:`
`,
})
导出类AppComponent实现AfterViewInit{
frm1:FormGroup;
构造函数(fb:FormBuilder){
this.frm1=fb.group({
姓名:[],
家庭:[]
});
}
ngAfterViewInit(){
var search=this.frm1.controls.family;
search.valueChanges.subscribe(x=>console.log(x));
}
}

对表单变量
frm1
使用
get
方法。并使用
ngOnInit()
而不是
ngAfterViewInit()

ngOnInit() {  
   this.frm1.get('family').valueChanges.subscribe( x => console.log(x));
}
试试这个:

从'@angular/core'导入{Component,AfterViewInit,OnInit};
从'@angular/forms'导入{FormGroup,FormBuilder};
从'rxjs/Rx'导入{Observable};
@组成部分({
选择器:'应用程序根',
模板:`你好,世界!
`})
导出类AppComponent实现AfterViewInit,OnInit{
frm1:FormGroup;
构造函数(私有formBuilder:formBuilder){}
ngOnInit():void{
这个。formInit();
this.formSet();
}
formInit():void{
this.frm1=this.formBuilder.group({
姓名:[''],
家庭['']
})
}
formSet():void{
常量editForm={
名称:'测试名称',
家庭:“测试家庭”,
};
此.frm1.patchValue(editForm)
}
ngAfterViewInit(){
this.frm1.controls.family.valueChanges.subscribe(
() => {
console.log(this.frm1.controls.family.value)
}
)
}
}

我已经在我的项目中进行了测试:它可以工作:您得到了什么错误您必须拥有表单init和set的函数。除此之外。您可以使用.next()方法来检测更改,我想:您需要在之后编辑表单,这就是为什么建议表单初始化并将代码放置在
ngOnInit()中,然后再试一次。没有理由在
ngAfterViewInit()内执行此操作。
感谢现在它工作正常,我可以知道AfterViewInit出现问题的原因吗!!这是我建议的一种解决方法,没有理由在
AfterViewInit
中查看表单控件,因为您正在处理模型驱动的表单,并且所有表单控件名称都已准备就绪。所以理想的地方应该是onInit()。我遇到了这个问题,因为我将此功能用于带有异步管道的ngFor,所以它会自动订阅,并且一切正常。现在我正在使用另一个带有formControl的控件,但我忘了订阅:(谢谢你的提示!为什么不在HTML的输入字段中使用
change()
事件处理程序呢?
import { Component , AfterViewInit, OnInit } from '@angular/core';
import {FormGroup,FormBuilder} from '@angular/forms';
import {Observable} from 'rxjs/Rx';

@Component({
selector: 'app-root',
template: `<h1>Hello World!</h1>
        <form [formGroup]="frm1">
        <input type="text" formControlName="name" >
        <input type="text" formControlName="family">
        </form>`})

export class AppComponent implements AfterViewInit, OnInit{ 

frm1 : FormGroup;

constructor( private formBuilder: FormBuilder){}

ngOnInit(): void {
    this.formInit();
    this.formSet();
}

formInit(): void {
    this.frm1 = this.formBuilder.group({
        name: [''],
        family['']
    })
}

formSet(): void {
    const editForm = {
        name: 'test-name',
        family: 'test familty',
    };
    this.frm1.patchValue(editForm) 
}

ngAfterViewInit(){  
this.frm1 .controls.family.valueChanges.subscribe(
       () => {
              console.log(this.frm1 .controls.family.value)
             }
        )
      }
}