如图,我有一个在init()中发一个http request然后返回的结果传入form中,为啥form不能正常显示?
不是init()都执行完之后才渲染view层的吗?
先把要渲染的代码写成一个方法 ,然后调用
同学,首先你说的后一句话是对的但是你理解错了。angular运行完init里的函数,但是你有一个异步操作,js的异步操作是加入在event loop里面的(所有同步操作做完后才开始做),所以angular运行你的httpcall方法后就已经当作运行完了你所有的同步代码,然后开始运行view啥的,然后发现你view里面用到了form但是没定义,所以报错。你subscribe里面的代码只会在你的http回来之后才会运行,因为谁也不能保证你的http什么时候回来,为了不block UI,js就先去运行其他代码了。
所以为了解决你的问题。首先把你new form的操作写在这个异步操作之外,你可以用任何值去初始化。然后再subscribe里面仔setvalue就好了
onInit() {
this.form = new FormGroup({module: new formControl(null), expiration: new formComtrol(null)});
this.servicecall.somecall().subscribe(res => {
this.form.get('module').setValue(res[0]);
this.form.get('expiray').setValue(res[1]);
});
}