Skip to content
This repository was archived by the owner on Feb 17, 2024. It is now read-only.

Commit e7ae446

Browse files
committed
refactor(models): use Rx ReplaySubject
1 parent a8b5ee1 commit e7ae446

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

src/app/models/CounterModel.ts

+9-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import {Observable, EventEmitter} from 'angular2/src/facade/async';
1+
// import {Observable, EventEmitter} from 'angular2/src/facade/async';
22
import {bind, Inject, Injectable} from 'angular2/di';
3+
import * as Rx from 'rx';
4+
var {Observable, ReplaySubject} = Rx;
35

46
import {CounterIntent} from '../intents/CounterIntent';
57

@@ -12,39 +14,31 @@ var _initialState:IState = {
1214
};
1315

1416

15-
interface IObservable {
16-
next(val:any)
17-
return(val:any)
18-
throw(val:any)
19-
observer(generator: any): Observable;
20-
}
21-
2217
@Injectable()
2318
export class CounterModel {
24-
public subject: Observable = new EventEmitter();
19+
public subject: any = new ReplaySubject(1);
2520
private _state: IState;
2621
constructor(
2722
@Inject(CounterIntent) intent, @Inject('counterState') state) {
2823
console.log('CounterMODEL');
29-
this._state = state;
24+
this._state = state;
3025

31-
var {
32-
incrementCounterSubject
33-
} = intent.subjects;
26+
var {incrementCounterSubject} = intent.subjects;
3427

3528
incrementCounterSubject.observer({
3629
next: this.incrementCounter.bind(this)
3730
});
3831

32+
this.subject.onNext(state);
3933
}
4034

4135
incrementCounter() {
4236
var counter = this._state.counter;
4337
var state = Object.assign({}, this._state, {
4438
counter: counter + 1
4539
});
46-
this._state = state;
47-
this.subject.next(state);
40+
this._state = state; // store prevous state until I find a better way
41+
this.subject.onNext(state);
4842
}
4943
}
5044

src/app/models/GreetModel.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
import {Observable, EventEmitter} from 'angular2/src/facade/async';
1+
// import {Observable, EventEmitter} from 'angular2/src/facade/async';
22
import {bind, Inject, Injectable} from 'angular2/di';
3+
import * as Rx from 'rx';
4+
var {Observable, ReplaySubject} = Rx;
5+
36

47
import {GreetIntent} from '../intents/GreetIntent';
58

@@ -16,30 +19,30 @@ var _initialState:IState = {
1619

1720
@Injectable()
1821
export class GreetModel {
19-
public subject: Observable = new EventEmitter();
22+
public subject: any = new ReplaySubject(1);
2023
private _state: IState;
2124
constructor(
2225
@Inject(GreetIntent) intent, @Inject('greetState') state) {
2326
console.log('GreetMODEL');
2427
this._state = state;
2528

26-
var {
27-
toggleGreetSubject
28-
} = intent.subjects;
29+
var {toggleGreetSubject} = intent.subjects;
2930

3031
toggleGreetSubject.observer({
3132
next: this.toggleGreet.bind(this)
3233
});
3334

35+
36+
this.subject.onNext(this._state);
3437
}
3538

36-
toggleGreet() {
39+
toggleGreet(subject) {
3740
var greet = this._state.greeting;
3841
var state = Object.assign({}, this._state, {
3942
greeting: greet === greet1 ? greet2 : greet1
4043
});
41-
this._state = state;
42-
this.subject.next(state);
44+
this._state = state; // store prevous state until I find a better way
45+
this.subject.onNext(state);
4346
}
4447
}
4548

0 commit comments

Comments
 (0)