Angular view for Cerebral.
npm install @cerebral/angular @angular/core @angular/platform-browser babel-plugin-transform-decorators-legacy
The Cerebral service exposes the Cerebral controller to your application.
import { NgModule } from '@angular/core'
import { BrowserModule } from '@angular/platform-browser'
import { provide } from 'cerebral'
import { AppService } from '@cerebral/angular'
import { AppComponent } from './app.component.ts'
import { SomeAngularService } from './SomeAngularService'
// Create a factory to instantiate Cerebral. It can receive
// dependencies which you can "provide" to Cerebral to be used
// within sequences
export function configureApp(someAngularService : SomeAngularService) {
return new AppService({
// We use the "provide" function to an angular service to the sequences
// of Cerebral
providers: [
provide('someAngularService', someAngularService)
]
})
})
@NgModule({
imports: [ BrowserModule ],
declarations: [ AppComponent ],
bootstrap: [ AppComponent ],
providers: [
{
provide: AppService,
useFactory: configureApp,
deps: [SomeAngularService]
},
]
})
export class AppModule {}
The connect decorator connects state and signals to your components.
import {
Component,
ChangeDetectionStrategy,
ChangeDetectorRef
} from '@angular/core'
import { sequences, state } from 'cerebral/tags'
import {
connect,
AppService,
CerebralComponent
} from '@cerebral/angular'
@Component({
selector: 'app-component',
template: `
<div (click)="onClick()">{{foo}}</div>
`,
// Change detection needs to be set to "OnPush"
changeDetection: ChangeDetectionStrategy.OnPush
})
@connect({
// For AOT to work you will have to use the array version of template
// tags
myName: state(['foo']),
onClick: sequences(['clicked'])
})
export class AppComponent extends CerebralComponent {
// You have to inject "ChangeDetectionRef" and "ControllerService" and pass
// them to parent for connect to do its work
constructor(cdr: ChangeDetectorRef, app: AppService) {
super(cdr, app)
app.getSequence('onClick')()
}
}