2016-12-19 51 views
0

我想要实现离子观察者模式2如何离子实现观察者模式2

我有这样的服务

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Events } from 'ionic-angular'; 

@Injectable() 
export class ExampleService { 
    private _events: Events; 

    constructor(public http: Http, events: Events) { 
    this._events = events; 
    } 

    doStuff() { 
    this.raiseBeginDownloadData('data'); 
    } 

    private raiseBeginDownloadData(hash: string){ 
    this._events.publish('begin-download', hash); 
    } 
} 

这是我的控制器:

import { Component } from '@angular/core'; 
import { NavController, AlertController, Platform } from 'ionic-angular'; 
import { ExampleService } from '../../providers/example-service'; 

@Component({ 
    selector: 'page-exaple', 
    templateUrl: 'example.html', 
    providers: [ExampleService] 
}) 

export class MyPage { 

    constructor(public navCtrl: NavController, platform: Platform, public alertCtrl: AlertController, public eventSvc: ExampleService) { 

    } 

} 

我的问题是,在这种情况下,我如何实现观察者模式?

我知道,在我的服务中,我需要创建一个方法,使控制器订阅/ unscribed这个事件;并在控制器中,我需要创建一个通知方法,但我不知道如何使它与IONIC 2/RxJs

非常感谢!

回答

4

事件是一个发布 - 订阅式事件系统,用于发送和响应应用程序级别事件。

因此,您可以在您的service中发射它并订阅Component

import { Events } from 'ionic-angular'; 

constructor(public events: Events) {} 

// first page (publish an event when a user is created) 
function createUser(user) { 
    console.log('User created!') 
    events.publish('user:created', user, Date.now()); 
} 

// second page (listen for the user created event) 
events.subscribe('user:created', (user, time) => { 
    // user and time are the same arguments passed in `events.publish(user, time)` 
    console.log('Welcome', user, 'at', time); 
}); 

在你的情况。

export class MyPage { 

    constructor(public events: Events) { } 
    this.events.subscribe('begin-download', (user, time) => { 
    // user and time are the same arguments passed in `events.publish(user, time)` 
    console.log('Welcome', user, 'at', time); 
    }); 
}