diff options
| author | Vojta Jina | 2012-03-18 23:46:30 -0700 | 
|---|---|---|
| committer | Vojta Jina | 2012-03-18 23:46:30 -0700 | 
| commit | 192ff61f5d61899e667c6dbce4d3e6e399429d8b (patch) | |
| tree | 2f5b4cd83b05a28e444ea1bac3c6bc7e3aeefa92 | |
| parent | 935c1018da05dbf3124b2dd33619c4a3c82d7a2a (diff) | |
| download | angular.js-192ff61f5d61899e667c6dbce4d3e6e399429d8b.tar.bz2 | |
feat(scope.$eval): Allow passing locals to the expression
| -rw-r--r-- | src/service/scope.js | 7 | ||||
| -rw-r--r-- | test/service/scopeSpec.js | 11 | 
2 files changed, 15 insertions, 3 deletions
diff --git a/src/service/scope.js b/src/service/scope.js index 09454bfb..4cf6a3e0 100644 --- a/src/service/scope.js +++ b/src/service/scope.js @@ -503,12 +503,13 @@ function $RootScopeProvider(){         * @param {(string|function())=} expression An angular expression to be executed.         *         *    - `string`: execute using the rules as defined in  {@link guide/dev_guide.expressions expression}. -       *    - `function(scope)`: execute the function with the current `scope` parameter. +       *    - `function(scope, locals)`: execute the function with the current `scope` parameter. +       * @param {Object=} locals Hash object of local variables for the expression.         *         * @returns {*} The result of evaluating the expression.         */ -      $eval: function(expr) { -        return $parse(expr)(this); +      $eval: function(expr, locals) { +        return $parse(expr)(this, locals);        },        /** diff --git a/test/service/scopeSpec.js b/test/service/scopeSpec.js index 972584cf..35be7a2f 100644 --- a/test/service/scopeSpec.js +++ b/test/service/scopeSpec.js @@ -416,8 +416,19 @@ describe('Scope', function() {        $rootScope.$eval(function(self) {self.b=2;});        expect($rootScope.b).toEqual(2);      })); + + +    it('should allow passing locals to the expression', inject(function($rootScope) { +      expect($rootScope.$eval('a+1', {a: 2})).toBe(3); + +      $rootScope.$eval(function(scope, locals) { +        scope.c = locals.b + 4; +      }, {b: 3}); +      expect($rootScope.c).toBe(7); +    }));    }); +    describe('$evalAsync', function() {      it('should run callback before $watch', inject(function($rootScope) {  | 
