1.0.16 • Published 8 years ago
typescript-observable v1.0.16
typescript-observable
Adds classes and interfaces to make Typescript classes observable.
Installation
With npm
npm install --save typescript-observableObservable
A class for observable objects.
on(type : string | string[], callback : (data : any) => void | IObserver) : { cancel : Function }Adds the observercallbackto the eventtype. The returned object has a functioncancelthat removes the listener.off(observer : IObserver) : booleanRemoves the observer. Only works if the bound observer is of typeIObserver. Returnstrueif the removal was successful, otherwise false.count() : numberCounts the number of observers.clear() : voidRemoves all observers.notify(event : IObservableEvent, data : any) : voidNotifies all the observers listening to theIObservableEventor any of its parents. The parameterdatais passed to the observers.
ChangeObservable
extends Observable
A subclass of Observable that tracks changes.
hasChanged() : booleanCheck if the object has changed.setChanged() : voidSet that the object has changed.clearChanged
IObservableEvent
An interface for events.
parent : IObservableEventObservers that observe the parent event will also be notified. Can benull.name : stringName of the event.
IObserver
An interface that defines an observer.
update(data : any, name?: string) : voidCalled when the observers are notified.
Example
The class to be observed can be extended with Observable
let rootEvent : IObservableEvent = {
parent: null,
name: 'root'
},
childEvent : IObservableEvent = {
parent: rootEvent,
name: 'child'
};
class TestObservable extends Observable {
foo() : void {
// do something
// notify observers listening to the rootEvent
notify(rootEvent, {
message: 'rootEvent was called'
});
}
bar() : void {
// do something else
// notify observers listening to the childEvent and the rootEvent
notify(childEvent, {
message: 'childEvent was called'
});
}
}
let testObservable = new TestObservable();
// Called on rootEvent and childEvent
testObservable.on('root', (data, name) => {
console.log('root observer', data.message, name);
});
// Called on childEvent
testObservable.on('child', (data, name) => {
console.log('child observer', data.message, name);
});
testObservable.foo();
/**
* Prints:
* root observer, rootEvent was called, root
*/
testObservable.bar();
/*
* Prints:
* root observer, childEvent was called, child
* child observer, childEvent was called, child
*/Contribute
Make sure to run the tests
npm test