mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix($parse): do not use locals to resolve object properties
Do not use the locals when performing a field access in an angular expression. Closes #5838 Closes #5862
This commit is contained in:
parent
8b395ff325
commit
f09b6aa5b5
2 changed files with 11 additions and 2 deletions
|
|
@ -707,7 +707,7 @@ Parser.prototype = {
|
|||
var getter = getterFn(field, this.options, this.text);
|
||||
|
||||
return extend(function(scope, locals, self) {
|
||||
return getter(self || object(scope, locals), locals);
|
||||
return getter(self || object(scope, locals));
|
||||
}, {
|
||||
assign: function(scope, value, locals) {
|
||||
return setter(object(scope, locals), field, value, parser.text, parser.options);
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ describe('parser', function() {
|
|||
forEach([2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 42, 99], function(pathLength) {
|
||||
it('should resolve nested paths of length ' + pathLength, function() {
|
||||
// Create a nested object {x2: {x3: {x4: ... {x[n]: 42} ... }}}.
|
||||
var obj = 42;
|
||||
var obj = 42, locals = {};
|
||||
for (var i = pathLength; i >= 2; i--) {
|
||||
var newObj = {};
|
||||
newObj['x' + i] = obj;
|
||||
|
|
@ -371,6 +371,8 @@ describe('parser', function() {
|
|||
path += '.x' + i;
|
||||
}
|
||||
expect(scope.$eval(path)).toBe(42);
|
||||
locals['x' + pathLength] = 'not 42'
|
||||
expect(scope.$eval(path, locals)).toBe(42);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -938,6 +940,13 @@ describe('parser', function() {
|
|||
expect($parse('a.b')({a: {b: 0}}, {a: null})).toEqual(undefined);
|
||||
expect($parse('a.b.c')({a: null}, {a: {b: {c: 1}}})).toEqual(1);
|
||||
}));
|
||||
|
||||
it('should not use locals to resolve object properties', inject(function($parse) {
|
||||
expect($parse('a[0].b')({a: [ {b : 'scope'} ]}, {b : 'locals'})).toBe('scope');
|
||||
expect($parse('a[0]["b"]')({a: [ {b : 'scope'} ]}, {b : 'locals'})).toBe('scope');
|
||||
expect($parse('a[0][0].b')({a: [[{b : 'scope'}]]}, {b : 'locals'})).toBe('scope');
|
||||
expect($parse('a[0].b.c')({a: [ {b: {c: 'scope'}}] }, {b : {c: 'locals'} })).toBe('scope');
|
||||
}));
|
||||
});
|
||||
|
||||
describe('literal', function() {
|
||||
|
|
|
|||
Loading…
Reference in a new issue