angularjs ng-repeat
要循环的数据$scope.friends = [
{name:'John',age:25,gender:'boy'},{name:'Jessie',age:30,gender:'girl'},{name:'Johanna',age:28,{name:'Joy',age:15,{name:'Mary',{name:'Peter',age:95,{name:'Sebastian',age:50,{name:'Erika',age:27,{name:'Patrick',age:40,{name:'Samantha',age:60,gender:'girl'}
];
一,定义和用法ng-repeat 指令用于循环输出指定次数的 HTML 元素。 二,语法和参数值1,语法<element ng-repeat="expression"></element>
所有的 HTML 元素都支持该指令。 2,参数值(1),expression为数组循环:x in records使用数组循环输出一个表格: <table ng-controller="myCtrl" border="1"> <tr ng-repeat="x in records"> <td>{{x.Name}}</td> <td>{{x.Country}}</td> </tr> </table> <script> var app = angular.module("myApp",[]); app.controller("myCtrl",function($scope) { $scope.records = [ { "Name" : "Alfreds Futterkiste","Country" : "Germany" },{ "Name" : "Berglunds snabbk?p","Country" : "Sweden" },{ "Name" : "Centro comercial Moctezuma","Country" : "Mexico" },{ "Name" : "Ernst Handel","Country" : "Austria" } ] }); </script>
(2),expression为对象循环:(key,value) in myObj使用对象循环输出一个表格: <table ng-controller="myCtrl" border="1"> <tr ng-repeat="(x,y) in myObj"> <td>{{x}}</td> <td>{{y}}</td> </tr> </table> <script> var app = angular.module("myApp",function($scope) { $scope.myObj = { "Name" : "Alfreds Futterkiste","Country" : "Germany","City" : "Berlin" } }); </script>
(3),其他参数值item in items track by $id(item) 相当于 item in items item in items track by item.id item in items track by $index 三,ng-repeat和(ng-repeat-start,ng-repeat-end)ng-repeat和(ng-repeat-start,ng-repeat-end)都是循环一个items, 区别是ng-repeat-start,ng-repeat-end可以跨越多个标签, 而ng-repeat只能在一个标签里面循环! <header ng-repeat-start="friend in friends"> Header {{ friend.name }} </header> <div class="body"> Body {{ friend.age }} </div> <footer ng-repeat-end> Footer {{ friend.gender }} <hr> </footer>
四,特殊变量ng-repeat里面提供了几个变量,为开发者提供一些快捷的操作, $index: 表示当前item的索引, 五,官网实例item in items | filter : x as results ,结果filter过滤后的 结果会被保存到results I have {{friends.length}} friends. They are: <input type="search" ng-model="q" placeholder="filter friends..." /> <ul class="example-animate-container"> <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results"> [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. </li> <li class="animate-repeat" ng-if="results.length === 0"> <strong>No results found...</strong> </li> </ul>
六,注意1,如果要循环的数组是这样的$scope.dataList = [1,2,1]; 会报错 这是因为ng-Repeat不允许collection中存在两个相同Id的对象。 对于数字或者字符串等基本数据类型来说,它的id就是它自身的值。因此数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的track by表达式。 如果是javascript对象类型数据,那么就算内容一摸一样,ng-repeat也不会认为这是相同的对象。 2,慎用$index作为增删改查数据的依据,由于经过filter过滤后,index的值已经变化,会引起错误,最好直接取item对象去增删改查! 3,track by 一定要放在orderBy之后,否则会影响orderBy的效果。 参考文章:https://docs.angularjs.org/api/ng/directive/ngRepeat demohttp://download.csdn.net/detail/superjunjin/9710594 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |