Skip to content

Commit db2acec

Browse files
sqlProvidersqlProvider
authored andcommitted
initial commit
0 parents  commit db2acec

File tree

2 files changed

+123
-0
lines changed

2 files changed

+123
-0
lines changed

README.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# Pub/Sub Service for Angular 2
2+
3+
A simple publisher/subscriber service.
4+
5+
## Usage
6+
- Import service in your codes.
7+
8+
- Add service to App Module providers.
9+
```typescript
10+
...
11+
12+
import { EventDispatcherService } from './path/to/service/angular2-pubsub.service'; // <= HERE
13+
14+
@NgModule({
15+
declarations: [
16+
RootComponent,
17+
NavigationComponent,
18+
OverlayComponent
19+
],
20+
imports: [
21+
BrowserModule,
22+
FormsModule,
23+
HttpModule
24+
],
25+
providers: [EventDispatcherService], // <= AND HERE
26+
bootstrap: [RootComponent]
27+
})
28+
29+
...
30+
```
31+
- And import service wherever you want
32+
33+
## Documentation
34+
35+
#### Class Overview
36+
37+
```typescript
38+
declare class PubSubService{
39+
private events: Object;
40+
$pub(event: string, eventObject?: any): void;
41+
$sub(event: string): <Observable<number>>;
42+
}
43+
```
44+
45+
#### PubSubService.$pub(event: stirng, eventObject?: any): void
46+
47+
Publish event to all subscriber.
48+
49+
etc.
50+
```typescript
51+
export class OverlayComponent implements OnInit, OnDestroy {
52+
constructor(private pubsub: PubSubService) { }
53+
54+
anyFunc(){
55+
this.pubsub.$pub('pleaseCloseSidenav', 'helloIAmOverlay');
56+
}
57+
}
58+
```
59+
60+
#### PubSubService.$sub(event: stirng): <Observable<number>>
61+
62+
Subscribe to channel.
63+
64+
etc.
65+
```typescript
66+
export class NavigationComponent implements OnInit, OnDestroy {
67+
sideanvSub: any;
68+
69+
constructor(private pubsub: EventDispatcherService) { }
70+
71+
ngOnInit() {
72+
this.closeSidenavSub = this.pubsub.$sub('pleaseCloseSidenav').subscribe((from) => {
73+
from ? this.sidenavOpened = false : void 0
74+
});
75+
}
76+
ngOnDestroy() {
77+
this.closeSidenavSub.unsubscribe();
78+
}
79+
```
80+
81+
$sub method have one bug. RxJS Subscriber call subscribe method on start like Angular 1.x $scope.$watch.
82+
83+
```typescript
84+
this.closeSidenavSub = this.pubsub.$sub('pleaseCloseSidenav').subscribe((from) => {
85+
console.log(form);
86+
});
87+
88+
// => 0
89+
```

angular2-pubsub.service.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Injectable } from '@angular/core';
2+
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
3+
import { Observable } from 'rxjs/Observable';
4+
5+
@Injectable()
6+
export class PubSubService {
7+
private events = {};
8+
9+
constructor() { }
10+
11+
$sub(event: string) {
12+
if (event == undefined) {
13+
console.warn('[PubSub Service] => Subscription method must get event name.');
14+
return;
15+
};
16+
17+
if (this.events[event] === undefined)
18+
this.events[event] = new BehaviorSubject<number>(0);
19+
20+
return <Observable<number>>this.events[event].asObservable();
21+
}
22+
$pub(event: string, eventObject?: any) {
23+
if (event == undefined) {
24+
console.warn('[PubSub Service] => Publish method must get event name.');
25+
return;
26+
}
27+
else if (this.events[event] === undefined) {
28+
console.warn('[PubSub Service] => No recorded events found for "' + event + '".');
29+
return;
30+
}
31+
32+
this.events[event].next(eventObject);
33+
}
34+
}

0 commit comments

Comments
 (0)