我可以建议使用Observables代替事件吗?即使您可以使用事件完成相同的操作,但由于您使用服务来获取数据,这将是一种更好的方法。在这里你可以看到这个工作 plunker中的代码。
所以通信将是:
Btn / page ---[call the service]---> Service ---[notify other page and send data]---> Page
所以在服务中,你可以创建一个observable,这样其他页面就可以订阅它,并在数据准备好时得到通知。
import {Injectable} from '@angular/core';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class UserDataService {
private getDataObserver: any;
public getData: any;
constructor() {
this.getDataObserver = null;
this.getData = Observable.create(observer => {
this.getDataObserver = observer;
});
}
public getUserData() {
// Fake data to send to the page
let userList = [
{ id: 1, name: 'user01 '},
{ id: 2, name: 'user02 '},
{ id: 3, name: 'user03 '}]
// This simulates an http request
setTimeout(() => {
// The next method will notify all the subscribers and will
// send the data.
this.getDataObserver.next(userList);
}, 1000);
}
}
该next(...)
方法将通知所有订阅者(在本例中为其他页面)并将数据发送给它。
然后在另一个页面中,您只需要订阅该 observable 即可在数据可用时收到通知,并像这样调用服务:
import { Component } from "@angular/core";
import { UserDataService } from 'service.ts';
@Component({
templateUrl:"home.html"
})
export class HomePage {
users: any[];
constructor(private service: UserDataService) {
// We subscribe to the observable to be notified when
// the data is ready
this.service.getData.subscribe((userList) => {
this.users = userList;
});
}
public getData(){
this.service.getUserData();
}
}
确保从 App 组件UserDataService
的providers
数组中添加 ,以便在整个应用程序(单例服务)中使用相同的实例。
import { Component } from "@angular/core";
import { ionicBootstrap, Platform } from 'ionic-angular/index';
import { HomePage } from './home.ts';
import { UserDataService } from 'service.ts';
@Component({
template: '<ion-nav [root]="rootPage"></ion-nav>',
providers: [UserDataService]
})
export class MyApp {
constructor(private platform: Platform) {
this.rootPage = HomePage;
}
}
ionicBootstrap(MyApp);