路由守卫可以返回对象,对象在组件初始化中可以获取并可以绑定对象值在页面上,但打印对象属性值确是undefined
来源:3-4 路由动画及高阶动画函数

慕粉1627455901
2017-11-30
路由守卫:
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):DiseaseBaseInfo | Observable<DiseaseBaseInfo> | Promise<DiseaseBaseInfo> {
const diseaseid=route.queryParams['id'];
// const diseaseid = route.params['id'];
const geturl = this.diseasewebapiroot + '/GetDiseaseBaseInfoById?diseaseid='+diseaseid;
this.disease = this.http.get(geturl).map(response => response.json());
let diseasebaseinfo=new DiseaseBaseInfo();
this.disease.subscribe(data => {
diseasebaseinfo.Id=data.Data['Id'];
diseasebaseinfo.StandardName=data.Data['StandardName'];
diseasebaseinfo.Name=data.Data['Name'];
diseasebaseinfo.Sex=data.Data['Sex'];
});
return diseasebaseinfo;
}
组件:
ngOnInit() {
// 从路由守卫Resolve返回的数据中才初始化
this.routedatainfo.data.subscribe((data: { diseaseeditinfo: DiseaseBaseInfo }) => {
this.diseasedata = data.diseaseeditinfo;
});
}
组件页面:
<input id="standardname" type="text" class="form-control" [formControl]="myevent" [(ngModel)]="diseasestandardname" value="{{diseasedata.StandardName}}">
可以正常绑定对象的属性值,但在组件的方法 初始方法中要获取到:this.diseasedata.StandardName确报
undefined错误,请问这是怎么回事?
3回答
-
慕粉1627455901
提问者
2017-12-01
ngOnInit() {
// 从路由守卫Resolve返回的数据中才初始化
this.routedatainfo.data.subscribe((data: { diseaseeditinfo: DiseaseBaseInfo }) => {
this.diseasedata = data.diseaseeditinfo;
console.log(this.diseasedata);
console.log(this.diseasedata.StandardName);
});
}
打印出来的结果:
00 -
慕粉1627455901
提问者
2017-12-01
我是直接在订阅中写的,可以打印出this.diseasedata,是一个对象,能看到其中属性的值,但直接打印属性的值就是undefined,是不是需要先把this.diseasedata这个typescript对象转换成json对象。
062017-12-02 -
接灰的电子产品
2017-12-01
rx 是异步的啊,你调用了不代表立即赋值啊
00
Angular打造企业级协作平台,让你在Angular领域中出类拔萃
998 学习 · 536 问题
相似问题