首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解析器角度6

解析器角度6
EN

Stack Overflow用户
提问于 2018-08-16 04:59:59
回答 1查看 820关注 0票数 1

我正在为我的Angular 6应用程序的路由创建一个解析器。

目前,我调用API并将数据返回给组件,这样它就可以在组件的模板中呈现数据。

foo.resolver.ts

代码语言:javascript
运行
复制
@Injectable()
export class FooResolver implements Resolve<any> {

  constructor(private fooService: FooService) {}

  resolve(route: ActivatedRouteSnapshot) {   
    return this.fooService.getById(route.paramMap.get('id'));
  }
}

foo.component.ts

代码语言:javascript
运行
复制
export class FooComponent implements OnInit {

  fooObj: any = {};

  constructor(private route: ActivatedRoute) { }

  ngOnInit() {    
    this.fooObj = this.route.snapshot.data.fooObject;    
  }
}

但是,一旦getById完成并向我的foo.component.ts类返回了一个自定义对象,我就需要更改这个当前实现,以便对另一个API子调用。我已经尝试编辑resolve函数来反映这个需求。

代码语言:javascript
运行
复制
resolve(route: ActivatedRouteSnapshot) {   

    return this.FooService.getById(route.paramMap.get('id')).pipe(map(result => {

        this.fooService.getType().subscribe(results => {

            result.type = this.getObject(results, result.typeId);

        });

        return result;
    }));

private getObject(collection: any, id: number): any {
    return collection.find(e => e.id == id);
}

但是,我在控制台中收到错误。关于不能读取未定义的属性'name‘。我不认为我正在从resolve函数的第二个版本中恢复一个已完成的可观察对象。

EN

回答 1

Stack Overflow用户

发布于 2018-08-16 05:35:04

代码应该是

代码语言:javascript
运行
复制
return this.FooService.getById(route.paramMap.get('id')).pipe(
  switchMap(result => 
    this.fooService.getType().pipe(
      map(results => {
        result.type = this.getObject(results, result.typeId);
        return result;
      })
    )
  )
);

否则,路由器在第一个可观测对象发出后立即将结果提供给组件,而不等待第二个可观测对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51866357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档