2016-11-23 55 views
0

的问题首先检索数据以设置默认表单值? (Angular2)

我设置了一个相当复杂的形式,每一次我提交补丁请求重置价值为null。

在当我尝试设置默认值在它不会工作的服务加载的数据,由于数据不可马上表单控件/尚未保存到public model = Model[]

守则

getControls() { 
    let controlObj = {} 

    for (var i = 0; i <= 7; i++) { 
     this.field1 = "field-1-" + i 

     testObj[this.field1] = new FormControl({value: this.model.name}, Validators.required) 

    } 
    this.controls = testObj 
    return this.controls; 
    } 



    ngOnInit() { 

    this.myService.getData() 
     .subscribe(
     settings => { 
      this.model = model; 
      console.log(this.model) 

     }, 
     error => console.error(error) 
     ) 

    console.log(this.model) 


    this.settingsForm = new FormGroup(
     this.getControls() 
    ) 

    } 

} 

摘要

new FormControl({value: this.model.name}不能检索此值作为服务d oes不保存要在组件内再次使用的数据。

在运行其余函数之前,我有没有办法让保存从组件获取请求中获取的信息?

我有点困惑,为什么console.log(this.modal)里面的服务请求返回的数据,但外面的一个返回null。

让我知道如果你需要更多的代码 - 我试图摆脱最低限度避免混淆。谢谢!

回答

1

我有点困惑,为什么服务请求中的console.log(this.modal)返回数据,但外部返回null。

因为它是异步处理。

console.log(this.model)外部subscribe可能会先执行,然后this.model接收到任何值,这就是为什么它显示为空。

如果你想getControls执行this.model具有价值后,再更改您的代码

ngOnInit() { 
    this.myService.getData() 
     .subscribe(
     settings => { 
      this.model = model; 
      this.settingsForm = new FormGroup(
       this.getControls() 
      ) 
     }, 
     error => console.error(error) 
     ); 
} 
+0

我没想到,最初,但它不工作,(想出了一个模板错误),所以不得不换我在ngIf内部形成,并在调用订阅中的this.getControls()后触发它。我不确定为什么最初尝试时它不工作,但感谢您的答案!它有效,也许我的订购是错误的。谢谢 ! – confusedandenthused