From b90f54a056f83a10c4fdec2a448a1d7b75c93520 Mon Sep 17 00:00:00 2001 From: SamGraber Date: Mon, 25 Apr 2016 12:12:56 -0400 Subject: [PATCH] Use rx observables to track changes to the service value. --- source/watchInService/watchInService.ts | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/source/watchInService/watchInService.ts b/source/watchInService/watchInService.ts index 553015c..75a279b 100644 --- a/source/watchInService/watchInService.ts +++ b/source/watchInService/watchInService.ts @@ -1,9 +1,24 @@ import * as angular from 'angular'; +import * as Rx from 'rx'; export const moduleName: string = 'watchInService'; class WatchedService { - watchedValue: number; + private _watchedValue: number; + watchedValueObservable: Rx.Subject; + + get watchedValue(): number { + return this._watchedValue; + } + + set watchedValue(value: number) { + this._watchedValue = value; + this.watchedValueObservable.onNext(value); + } + + constructor() { + this.watchedValueObservable = new Rx.Subject(); + } } class ServiceProviderController { @@ -24,9 +39,9 @@ function serviceProvider(): angular.IDirective { class WatchInServiceController { doubledValue: number; - static $inject: string[] = ['$scope', 'watchedService']; - constructor($scope: angular.IScope, public watchedService: WatchedService) { - $scope.$watch('controller.watchedService.watchedValue', (value: number): void => { + static $inject: string[] = ['watchedService']; + constructor(public watchedService: WatchedService) { + watchedService.watchedValueObservable.subscribe((value: number): void => { this.doubledValue = value * 2; }); }