diff options
| -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) {  | 
