如何在ionic2

时间:2017-04-14 22:07:47

标签: javascript angular ionic2

我对ionic2和javascript编码完全陌生。我的问题是这样的。

我有一个js文件,在其构造函数中我进行web api调用并将响应保存在变量var1中。我有另一种方法,使用var1对另一个端点进行第二次api调用。第二种方法是导出函数,并从另一个文件调用。现在,只要调用第二个方法,就会加载构造函数,这将构成第一个api调用,并且在响应可以存储在var1之前,第二个api调用是从导出的方法调用的,使用var1作为空白。我怎么能避免这种情况。我想等待,直到var1已经通过构造函数更新。

这是我的构造函数代码:

constructor(public http: Http, platform: Platform) {
   //console.log(this.http.get("http://freegeoip.net/json/"));
   this.http.get("http://freegeoip.net/json/").map(res => res.json()).subscribe(data => {
        if(data.country_code=="US")
          this.country_code = 1;
        else  if(data.country_code=="IN")
          this.country_code = 2;
    });
  }

这是被调用的导出方法:

load(): Observable<Post[]> {
...
let opt: RequestOptions;
  opt = new RequestOptions({
   headers: headers
  });
    return this.http.get(`${this.backand_api_url}`+this.country_code+'/posts', opt )
      .map(res => <Post[]>res.json().data);
  }

}

load方法使用this.country_code变量..它仍未从构造函数调用中更新。

编辑load()方法返回一个observable。

1 个答案:

答案 0 :(得分:0)

在构造函数中使用publishLast()。refCont(),在load中使用withLatestFrom。这样的事情:

@Component({
  selector: 'haha',
  template: 'number is {{y}}'
})
export class HahaComponent {
  init$: Observable<number>;
  y: number;

  constructor() {
    this.init$ = Observable.of(1)
      .delay(10000)
      .do(x => {
        console.log('init', x);
        this.y = x;
      })
      .publishLast()
      .refCount();
  }

  load() {
    console.log('load');
    this.init$
      .withLatestFrom(Observable.of(2), (a, b) => b)
      .do(x => console.log(x))
      .subscribe(x => this.y = this.y + x);
  }
}