RxJS-based message bus service for Angular2 apps inspired by Backbone.Radio. Inject it in your application module and have fun.
There is nothing angular2-specific, though. It is possible to use it in any application.
npm install --save ng-radio
First, import it:
import { NgRadio } from 'ng-radio';
Then, if using Angular2, inject it as a service (do not forget about providers):
......
import { NgRadio } from 'ng-radio';
......
@NgModule({
imports:[
......
],
providers: [
.......
NgRadio,
.......
],
constructor(private radio: NgRadio){...}
Or create an instance manually:
let radio = new NgRadio();
Since you have NgRadio instance in your app, you can use these methods for passing messages:
-
radio.cast(key, data)- send message to radio. -
radio.on(pattern)- returns observable you can subscribe to listen events.
Patterns may contain multiple segments split by :. Use this feature to create namespaces for messages you cast. You can use * in pattern to subscribe to any matching segment, or use ** to subscribe to all segments, starting from particular position.
For example, you can use on('error:*') and subscribe to all errors, including something like error:http or error:internal and so on:
radio.cast('app:start', 'started');
radio.cast('message:greet', 'Hi!');
radio.cast('message:bye', 'Bye!');
radio.on('app:start').subscribe((message)=>{
console.log(message); //will receive 'started' only
});
radio.on('message:greet').subscribe((message)=>{
console.log(message); //will receive 'Hi!'
});
radio.on('message:bye').subscribe((message)=>{
console.log(message); //will receive 'Bye!'
});
radio.on('message:*').subscribe((message)=>{
console.log(message); //will receive both 'Hi!' and 'Bye!'
});
radio.on('**').subscribe((message)=>{
console.log(message); //will receive all messages: 'started', 'Hi!' and 'Bye!'
});
These strings will match:
-
on('**' , callback)can subscribe to any message with any segments count -
on('a' , callback)can subscribe tocast('a', ...) -
on('a:b' , callback)can subscribe tocast('a:b', ...) -
on('a:b:c' , callback)can subscribe tocast('a:b:c', ...) -
on('a:**' , callback)can subscribe tocast('a:b:c', ...),cast('a:b:c:d:e:f', ...) -
on('a:*:*' , callback)can subscribe tocast('a:b:c', ...),cast('a:f:g', ...),cast('a:n:m', ...) -
on('a:b:*' , callback)can subscribe tocast('a:b:c', ...),cast('a:b:d', ...), but notcast('a:b', ...) -
on('a:b:**', callback)can subscribe tocast('a:b:c',. ..) -
on('*:b:*' , callback)can subscribe tocast('a:b:c', ...) -
on('a:*:*' , callback)can subscribe tocast('a:b:c', ...)