【发布时间】:2017-04-06 22:48:57
【问题描述】:
我正在创建一个角度编辑表单,我对从后端服务器返回的对象的生命周期感到困惑。当我在ngOnInit() 中调用我的服务时,我得到了可用的数据。当我将其分配给实例变量时,它在 initForm() 中未定义,即使我在分配该数据后调用 initForm()。
如果您查看 console.log 语句,您会发现该对象在 ngOnInit() 函数内工作,但在 initForm() 内不工作。我在这里想念什么?如何让整个组件都可以访问 this.data?
payee-edit.component.ts:
export class PayeeEditComponent implements OnInit, OnDestroy {
public payee: Payee;
id: number;
payeeEditForm: FormGroup;
data: Payee;
subscription: Subscription;
constructor(private router: Router, private route: ActivatedRoute, private payeeService: PayeeService) { }
ngOnInit() {
this.route.params
.subscribe(
(params: Params) => {
this.id = +params['id'];
this.subscription = this.payeeService.getPayee(this.id).subscribe(
data => {
this.data = data;
console.log(this.data.company); //THIS WORKS
}
);
}
);
this.initForm();
}
private initForm() {
console.log(this.data.company); //THIS RETURNS UNDEFINED
let payeeCompany = 'this.data.company';
let payeeFirstName = 'this.data.first_name;'
let payeeLastName = 'this.data.last_name;'
let payeeNotes = 'this.data.notes;'
this.payeeEditForm = new FormGroup({
'company': new FormControl(payeeCompany),
'first_name': new FormControl(payeeFirstName),
'last_name': new FormControl(payeeLastName),
'notes': new FormControl(payeeNotes)
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
payee.service.ts:
getPayee(id: number) {
return this.http.get(`http://localhost:3000/payees/${id}`)
.map(data => data.json());
}
编辑:
如果我在订阅中调用 initForm(),我会在页面加载时收到错误,抱怨需要调用 initForm()。在我触发触发 getPayee() 调用的事件之前,它不起作用。我现在明白为什么我现在会出现这种行为,所以谢谢你的链接。我只需要一些关于我的特定用例的帮助
【问题讨论】:
-
如果我在订阅中调用
initForm(),我会在页面加载时收到错误消息,抱怨需要调用initForm()。在我触发触发getPayee()调用的事件之前,它不起作用。我现在明白为什么我现在会出现这种行为,所以谢谢你的链接。我只需要一些关于我的特定用例的帮助。 -
确切的错误信息是什么?而且我刚刚注意到您正在使用字符串值...
let payeeCompany='this.data.company'将是字符串文字。您应该使用:let payeeCompany=this.data.company但您也可以在构建表单'company': newFormControl(this.data.company)时分配它。但是告诉我确切的错误信息,让我们看看我是否可以帮忙:) -
@AJT_82。大声笑是的,这些字符串值是为了使未定义的错误静音,以便我可以进行故障排除。你回家后我会试试你的答案。看起来它会起作用。
-
确定!让我知道进展如何:)
标签: angular angular2-services angular2-http angular2-observables