diff options
| -rw-r--r-- | src/ng/rootScope.js | 8 | ||||
| -rw-r--r-- | test/ng/rootScopeSpec.js | 14 | 
2 files changed, 21 insertions, 1 deletions
| diff --git a/src/ng/rootScope.js b/src/ng/rootScope.js index b6a582bc..866b957e 100644 --- a/src/ng/rootScope.js +++ b/src/ng/rootScope.js @@ -300,6 +300,14 @@ function $RootScopeProvider(){            watcher.fn = function(newVal, oldVal, scope) {listenFn(scope);};          } +        if (typeof watchExp == 'string' && get.constant) { +          var originalFn = watcher.fn; +          watcher.fn = function(newVal, oldVal, scope) { +            originalFn.call(this, newVal, oldVal, scope); +            arrayRemove(array, watcher); +          }; +        } +          if (!array) {            array = scope.$$watchers = [];          } diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js index 49364888..33db814c 100644 --- a/test/ng/rootScopeSpec.js +++ b/test/ng/rootScopeSpec.js @@ -99,6 +99,14 @@ describe('Scope', function() {        expect(spy).wasCalled();      })); +    it('should not keep constant expressions on watch queue', inject(function($rootScope) { +      $rootScope.$watch('1 + 1', function() {}); +      expect($rootScope.$$watchers.length).toEqual(1); +      $rootScope.$digest(); + +      expect($rootScope.$$watchers.length).toEqual(0); +    })); +      it('should delegate exceptions', function() {        module(function($exceptionHandlerProvider) { @@ -119,10 +127,14 @@ describe('Scope', function() {        var log = '';        $rootScope.$watch('a', function() { log += 'a'; });        $rootScope.$watch('b', function() { log += 'b'; }); +      // constant expressions have slightly different handling, +      // let's ensure they are kept in the same list as others +      $rootScope.$watch('1', function() { log += '1'; });        $rootScope.$watch('c', function() { log += 'c'; }); +      $rootScope.$watch('2', function() { log += '2'; });        $rootScope.a = $rootScope.b = $rootScope.c = 1;        $rootScope.$digest(); -      expect(log).toEqual('abc'); +      expect(log).toEqual('ab1c2');      })); | 
