Проблема привязки, когда директива в ngRepeat

так вот как это выглядит, и вот Plunker

parent scope 
   ng-repeat
       directive

в директиве есть атрибут двунаправленного связывания с переменной в родительской области.

Но это не работает так, как я хотел (но я могу понять, почему это не работает)

Причина: ngRepeat создаст свою собственную область, поэтому после изменения переменной в директиве Angular добавьте переменную в ngRepeat, но она оставит переменную в родительском без изменений.

Я могу сделать что-то вроде scope. $parent. $parent.variable, чтобы изменить переменную, но это не идея в Angular.

Как мне сделать?

Кроме того, если я изменяю повторяющийся элемент в коллекции элементов, элемент не может быть изменен.

Из-за той же причины выше.

Ответ 1

EDIT (снова): похоже, проблема в том, что вам нужны ссылочные типы в вашем массиве, такие как объекты или массивы.

Gloopy был точно прав в комментариях. Двунаправленное связывание не работало, потому что похоже, что Angular создавал копии ваших типов примитивов (строки, числа и т.д.) Между вторым спариванием областей. Итак... когда у вас есть вложенность двунаправленных связанных примитивов между двумя областями, это прекрасно, потому что он использует один экземпляр, но когда вы гнезди его более чем на одну глубину, он создает копию примитива, и вы больше не обновление одного и того же экземпляра.

Здесь новая демонстрация

app.controller('MainCtrl', function($scope) {
  $scope.items = [
    { text: 'apples' },
    { text: 'bananas' },
    { text: 'oranges' }
  ];
  $scope.addItem = function(){
    $scope.items.push({ text: 'test' });
  };
});

app.directive('test', function(){
  return {
    restrict: 'E',
    scope: {
      foo: '=foo'
    },
    template: '<div>{{foo}} <a ng-click="bar()">bar</a></div>',
    controller: function($scope){ 
      $scope.bar = function() {
        $scope.foo += '!';
      };
    }    
  };
});