如何在使用响应数据之前调用方法?

时间:2018-05-28 11:45:53

标签: angular angular5

我使用路由并尝试读取get参数id

public classes: any;
ngOnInit() {
    this.route.params.subscribe(params => {
      if (params['id']) {
        let a = getData(this.classes, params['id']);// Notice here
      }
    });

您可以注意到this.classes个对象。它是空的。

下面我有一个填充this.classes的方法:

 public loadClasses(): void {
    this.classService.getAllClasses()
      .subscribe(data => {
         this.classes = data;
    });
}

问题是路由首先工作因此对象this.classes是空的。

如何调用第一个loadClasses()来加载路由数据:`a a = getData(this.classes,params [' id']);?

2 个答案:

答案 0 :(得分:3)

要获取数据,您需要路由参数和类,这看起来像combineLatest的完美案例:

ngOnInit() {
    combineLatest(this.route.params, this.classService.getAllClasses())
    .subscribe(([params, classes]) => {
        if (params['id']) {
            let a = getData(classes, params['id']);
        }
    });
}

答案 1 :(得分:0)

我认为你应该这样做:

    public classes: any;

    ngOnInit() {
    this.loadClasses().subscribe(() => getData());

    private getData(): void {
        this.route.params.subscribe(params => {
          if (params['id']) {
            let a = getData(this.classes, params['id']);// Notice here
          }
        });
    }

     public loadClasses(): void {
        this.classService.getAllClasses()
          .subscribe(data => {
             this.classes = data;
        });
    }