diff options
| -rw-r--r-- | src/Scope.js | 4 | ||||
| -rw-r--r-- | src/directives.js | 22 | ||||
| -rw-r--r-- | test/directivesSpec.js | 12 |
3 files changed, 27 insertions, 11 deletions
diff --git a/src/Scope.js b/src/Scope.js index d22604fd..7b1d2673 100644 --- a/src/Scope.js +++ b/src/Scope.js @@ -207,6 +207,10 @@ Scope.prototype = { }, addWatchListener: function(watchExpression, listener) { + // TODO: clean me up! + if (!isFunction(listener)) { + listener = bind(this, this.compile(listener), {scope: this, self: this.state}); + } var watcher = this.watchListeners[watchExpression]; if (!watcher) { watcher = {listeners:[], expression:watchExpression}; diff --git a/src/directives.js b/src/directives.js index 861805fe..e081d179 100644 --- a/src/directives.js +++ b/src/directives.js @@ -82,6 +82,17 @@ angularDirective("ng-repeat", function(expression, element){ }; }, {exclusive: true}); +angularDirective("ng-watch", function(expression, element){ + var match = expression.match(/^([^.]*):(.*)$/); + if (!match) { + throw "Expecting watch expression 'ident_to_watch: watch_statement' got '" + + expression + "'"; + } + return function(){ + this.$watch(match[1], match[2]); + }; +}); + ///////////////////////////////////////// ///////////////////////////////////////// @@ -109,17 +120,6 @@ angularDirective("action", function(expression, element){ }; }); -//ng-watch -// <div ng-watch="$anchor.book: book=Book.get();"/> -angularDirective("watch", function(expression, element){ - var watches = { - 'lhs':'rhs' - }; // parse - return function(){ - this.$watch(watches); - }; -}); - //widget related //ng-validate, ng-required, ng-formatter //ng-error diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 2cee20d1..e0e53eeb 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -82,4 +82,16 @@ describe("directives", function(){ }); expect(log).toEqual("\"Expected ng-repeat in form of 'item in collection' but got 'i dont parse'.\";true;"); }); + + it('should ng-watch', function(){ + var scope = compile('<div ng-watch="i: count = count + 1" ng-init="count = 0">'); + scope.updateView(); + scope.updateView(); + expect(scope.get('count')).toEqual(0); + + scope.set('i', 0); + scope.updateView(); + scope.updateView(); + expect(scope.get('count')).toEqual(1); + }); }); |
