Ng2Actor is an implement for angular2 or greater. It makes message exchange more easier between components or services in angular.
This project was generated with Angular CLI version 7.0.6.
- you can defined any actor in anywhere
- support broadcast messages
- support forward messages
- support foreground and background mode(foreground mode will handle the message right now , background mode will save message in actor's message box)
- very simple to use
- run
npm i -S ng2-actor
in your project - import
Ng2ActorModule
to yourAppModule
'simports
field - then you can define your actors , use anywhere
when you finished install,you can do following things to use actor
you can define an actor in any component or service.like this:
import {Component, OnDestroy, OnInit} from '@angular/core';
import {Actor, ActorService} from "ng2-actor";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit,OnDestroy{
title = 'ng2-electron-demo';
appActor:Actor = null
constructor(private $actor:ActorService){}
ngOnInit(): void {
this.$actor.create('first')
this.appActor = this.$actor.start('demo',m=>{
console.log(m.message)
})
this.appActor.sendByName('first','hi~first')
setTimeout(()=>{this.appActor.sendByName('first','hi~first2')},2000)
}
ngOnDestroy(): void {
this.$actor.stop(this.appActor.name)
}
}
- Inject
ActorService
using DI. - Create an Actor and give it a receiver function.
- Send messages according to actor.
- When the component destroy, you can
stop
orpause
this actor.
It is so easy?Right?
.name
: a unique name for actor, required..state
: the actor's state, it has two value:Actor.STATE_FOREGROUND
andActor.STATE_BACKGROUND
..backgroundMessageBox
: a message box for message cache when actor under the background state.Usually, you need not to access it..actorSystem
: ActorService's reference.
constructor(name:string,actorSystem:ActorService)
receive(m:{message:any,sender:Actor,receiver:Actor})=>any
: Actor's message handlersendByName(name:string,message:any)=>void
send(actor:Actor,message:any)=>void
forwardByName(name:string,msg:{message:any,sender:Actor,receiver:Actor})=>void
: forward method can give the message to another actor and keep the origin senderforward(actor:Actor,msg:{message:any,sender:Actor,receiver:Actor})=>void
broadcast(message:any)=>void
: can send a message to all actors, include itselftell(message:any,sender:Actor)=>void
: let this actor receive a message with a sender. Usually, you should use sendXXX method to send message not thisbecome(receiver:(m:{message:any,sender:Actor,receiver:Actor})=>any)=>void
: change the actor's receive handler
.actors
: all the actors in this actor system
create(name:string):Actor
: create an actor with a none receiver and background state in actor system. It can be used in prebuilt an actor and let it cache message during it not startedstart(name:string,receiver:(m:{message:any,sender:Actor,receiver:Actor})=>any):Actor
: start an actor with a receiver by name and let this actor in foreground statestartActor(actor:Actor):Actor
pause(name:string):void
: let this actor switch to background mode by namestop(name:string):void
: remove the actor from this actor system by name
- the preload actor defined. You can provide it in your app module to build preload actor by giving name array. For example:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
Ng2ActorModule
],
providers: [
{provide:PRELOAD_ACTORS,useValue:['a','b']}
],
bootstrap: [AppComponent]
})
export class AppModule { }