Я пытаюсь решить проблему области видимости внутри цикла ng-repeat - я просмотрел довольно много вопросов, но не смог заставить свой код работать.
Код контроллера:
function Ctrl($scope) {
$scope.lines = [{text: 'res1'}, {text:'res2'}];
}
Посмотреть:
<div ng-app>
<div ng-controller="Ctrl">
<div ng-repeat="line in lines">
<div class="preview">{{text}}{{$index}}</div>
</div>
<div ng-repeat="line in lines">
<-- typing here should auto update it's preview above -->
<input value="{{line.text}}" ng-model="text{{$index}}"/>
<!-- many other fields here that will also affect the preview -->
</div>
</div>
</div>
Вот скрипка: http://jsfiddle.net/cyberwombat/zqTah/
В основном у меня есть объект (это генератор флаеров), который содержит несколько строк текста. Каждая строка текста может быть изменена пользователем (текст, шрифт, размер, цвет и т.д.), и я хочу создать для нее предварительный просмотр. В приведенном выше примере показано только поле ввода для ввода текста, и я хотел бы, чтобы оно автоматически / по мере ввода обновляло предварительный просмотр div, но будет гораздо больше элементов управления.
Я также не уверен, что получил правильный код для индекса цикла - это лучший способ создать имя ng-модели внутри цикла?
источник
Ответы:
Для каждой итерации цикла ng-repeat
line
это ссылка на объект в вашем массиве. Поэтому для предварительного просмотра значения используйте{{line.text}}
.Точно так же, чтобы привязка к тексту, DataBind к тому же:
ng-model="line.text"
. Вам не нужно использоватьvalue
при использовании ng-модели (на самом деле не нужно).Скрипка .
Для более глубокого изучения областей видимости и ng-repeat см. Какие нюансы наследования прототипа / прототипа области видимости в AngularJS? , раздел ng-repeat .
источник
источник