Guest User

Untitled

a guest
Jul 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.69 KB | None | 0 0
  1. import {Observable, Subject} from "rxjs";
  2.  
  3. /**
  4. * Usage
  5. *
  6. * @Component({
  7. * selector: 'todo',
  8. * template: ``
  9. * })
  10. * class Todo {
  11. * @Input() name: string;
  12. * @InputChange<Todo, string>('name') nameChange$: Observable<string>;
  13. * }
  14. */
  15. export function InputChange<C, T>(inputName: keyof C) {
  16. return function (target: C, key: string): void {
  17. let value: T;
  18. const onChange: Subject<T> = new Subject<T>();
  19. Object.defineProperty(target, key, {
  20. get: (): Observable<T> => {
  21. return onChange.asObservable();
  22. }
  23. });
  24. Object.defineProperty(target, inputName, {
  25. get: (): T => {
  26. return value;
  27. },
  28. set: (val: T): void => {
  29. onChange.next(val);
  30. value = val;
  31. }
  32. });
  33. };
  34. }
Add Comment
Please, Sign In to add comment