Как два ng-repeat объединить в одну модель?

Здравствуйте! Постараюсь объяснить вкратце. Имеем два файла:
obj.html:
<ul>
    <li ng-repeat="object in obj.items" ng-model="obj.items">
        <input type="text" value="{{ object }}">
    </li>
</ul>

con.html:
<ul>
    <li class="{{ obj.opt.list_class }}" ng-repeat="object in obj.items">
        {{ object }}
    </li>
</ul>

Которые ng-include-ятся:
<ul ng-model="SortCtrl.list2">
    <li class="list-type-option" ng-repeat="obj in SortCtrl.list2" /*ng-show="SortCtrl.compareBlog(obj)"*/>
        <div ng-include="SortCtrl.getObject(obj)"></div>
        <div ng-include="SortCtrl.editObject(obj)"></div>
    </li>
</ul>

в файле app.js:
self.getObject = function (obj) { return 'templates/' + obj.type + '/obj.html'; };
self.editObject = function (obj) { return 'templates/' + obj.type + '/con.html'; };

В результате создаётся две модели (хотя нужна одна). И при изменении значения во втором "поле" - изменяется только вторая модель.
Хотя если подключать два других файла (без ng-repeat):
obj.html:
<p class="{{ obj.opt.class }}">{{ obj.opt.value }}</p>

con.html:
<label>Text:</label><input type="text" ng-model="obj.opt.value" value="{{obj.opt.value}}">
Всё работает как и задумано.
Направьте юного падавана на путь истинный, друзья)

P.S. Если я не понятно объяснил - могу выложить больше кода )
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
iNickolay
@iNickolay Автор вопроса
Решение, которое помогло:
Надо было указать модель с индексом
obj.html:
<ul>
    <li ng-repeat="object in obj.items track by $index">
        <input type="text" ng-model="obj.items[$index]">
    </li>
</ul>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
impwx
@impwx
Разработчик
Директива ng-include по умолчанию всегда создает изолированный scope. Лучший способ этого избежать - создать отдельные директивы под ваши элементы, например object-view и object-edit. Там изолированная область создаваться не будет, если вы этого не укажете.

Более быстрый, но более грязный вариант - сделать собственную альтернативу ng-include, которая делает всё то же самое, но не изолирует область. Вот тут есть реализация:

stackoverflow.com/a/17340138/1293168
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы