Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {Observable, Subject} from "rxjs";
- /**
- * Usage
- *
- * @Component({
- * selector: 'todo',
- * template: ``
- * })
- * class Todo {
- * @Input() name: string;
- * @InputChange<Todo, string>('name') nameChange$: Observable<string>;
- * }
- */
- export function InputChange<C, T>(inputName: keyof C) {
- return function (target: C, key: string): void {
- let value: T;
- const onChange: Subject<T> = new Subject<T>();
- Object.defineProperty(target, key, {
- get: (): Observable<T> => {
- return onChange.asObservable();
- }
- });
- Object.defineProperty(target, inputName, {
- get: (): T => {
- return value;
- },
- set: (val: T): void => {
- onChange.next(val);
- value = val;
- }
- });
- };
- }
Add Comment
Please, Sign In to add comment