路由守卫可以返回对象,对象在组件初始化中可以获取并可以绑定对象值在页面上,但打印对象属性值确是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);


    });

  }

打印出来的结果:

//img.mukewang.com/szimg/5a20e6950001a69c04390160.jpg

0
0

慕粉1627455901

提问者

2017-12-01

我是直接在订阅中写的,可以打印出this.diseasedata,是一个对象,能看到其中属性的值,但直接打印属性的值就是undefined,是不是需要先把this.diseasedata这个typescript对象转换成json对象。

0
6
慕粉1627455901
回复
接灰的电子产品
export class DiseaseBaseInfo { Id: string; StandardName: string; Name: string; Sex: string; }
2017-12-02
共6条回复

接灰的电子产品

2017-12-01

rx 是异步的啊,你调用了不代表立即赋值啊

0
0

Angular打造企业级协作平台,让你在Angular领域中出类拔萃

全网首个介绍官方 Material 组件库用法与 Redux 在 Angular 中的应用

998 学习 · 536 问题

查看课程