2016-12-19 36 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); 
    }); 
}