diff --git a/src/service/scope.js b/src/service/scope.js index 09454bfb6e53..4cf6a3e0b964 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 972584cf8604..35be7a2f69b3 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) {