Потому что ng-repeat
создает новую область.
На этот вопрос отвечали много раз, потому что нюанс немного сложно понять, особенно если вы не знаете всего о прототипном наследовании js: https://github.com/angular/angular.js/wiki/Understanding-Scopes
РЕДАКТИРОВАТЬ: кажется, этот ответ очень спорный. Просто для ясности — так работает JS. Вы действительно не должны пытаться изучать Angular, пока не поймете, как работает JS. Тем не менее, ссылка, кажется, отсутствует
Итак, вот пример того, как JS работает в этом случае:
var a = {value: 5};
var b = Object.create(a); // create an object that has `a` as its prototype
// we can access `value` through JS' the prototype chain
alert(b.value); // prints 5
// however, we can't *change* that value, because assignment is always on the designated object
b.value = 10;
alert(b.value); // this will print 10...
alert(a.value); // ... but this will print 5!
Итак, как мы можем обойти это?
Что ж, мы можем «заставить» себя пройти через цепочку наследования — и таким образом мы будем уверены, что всегда обращаемся к правильному объекту, будь то доступ к значению или его изменение.
var a = {obj: {value: 5}};
var b = Object.create(a); // create an object that has `a` as its prototype
// we can access `value` through JS' the prototype chain:
alert(b.obj.value); // prints 5
// and if we need to change it,
// we'll just go through the prototype chain again:
b.obj.value = 10;
// and actually refer to the same object!
alert(b.obj.value == a.obj.value); // this will print true
person
Ven
schedule
24.05.2013