请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

路由守卫可以返回对象,对象在组件初始化中可以获取并可以绑定对象值在页面上,但打印对象属性值确是undefined

路由守卫:
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

3回答

提问者 慕粉1627455901 2017-12-01 13:20:38

ngOnInit() {

    // 从路由守卫Resolve返回的数据中才初始化

    this.routedatainfo.data.subscribe((data: { diseaseeditinfo: DiseaseBaseInfo }) => {

      this.diseasedata = data.diseaseeditinfo;

      console.log(this.diseasedata);

      console.log(this.diseasedata.StandardName);


    });

  }

打印出来的结果:

https://img1.sycdn.imooc.com//szimg/5a20e6950001a69c04390160.jpg

0 回复 有任何疑惑可以回复我~
提问者 慕粉1627455901 2017-12-01 12:57:20

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

0 回复 有任何疑惑可以回复我~
接灰的电子产品 2017-12-01 12:32:34

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信