我正在尝试处理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-model名称的最佳方法?
答案 0 :(得分:114)
对于ng-repeat循环的每次迭代,line
是对数组中对象的引用。因此,要预览该值,请使用{{line.text}}
。
同样,对于文本的数据绑定,数据绑定到相同的:ng-model="line.text"
。使用ng-model时不需要使用value
(实际上你不应该)。
要更深入地了解范围和ng-repeat,请参阅What are the nuances of scope prototypal / prototypical inheritance in AngularJS?, ng-repeat 部分。
答案 1 :(得分:2)
<h4>Order List</h4>
<ul>
<li ng-repeat="val in filter_option.order">
<span>
<input title="{{filter_option.order_name[$index]}}" type="radio" ng-model="filter_param.order_option" ng-value="'{{val}}'" />
{{filter_option.order_name[$index]}}
</span>
<select title="" ng-model="filter_param[val]">
<option value="asc">Asc</option>
<option value="desc">Desc</option>
</select>
</li>
</ul>