angular ng-repeat使用及注意事项

用法:ng-repeat="extension";

extension(表达式) 定义了如何循环集合。

表达式实例规则:

1. x in records

2. (key,value) in myObj

3. x in records track by $id(x)

我们可以使用ng-repeat指令遍历一个JavaScript数组,当数组中有重复元素的时候,AngularJS会报错:

Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use ‘track by‘ expression to specify unique keys. Repeater: user in users, Duplicate key: number:1。

如下面的代码就会报错:

<!DOCTYPE html>
<html ng-app="app" ng-controller="appCtrl">
<head>
    <title>Self Document</title>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    var app = angular.module(‘app‘,[]);
    app.controller(‘appCtrl‘,function($scope,$element){
        $scope.dataList = [1,2,1];
    });
</head>
<body>
    <div ng-repeat="value in dataList">
        <p>
            <span ng-bind="value"></span>
        </p>
    </div>
</body>
</html>

这是因为ng-repeat不允许集合中存在两个相同id的对象。

For example: item in items is equivalent to item in items track by $id(item). This implies that the DOM elements will be associated by item identity in the array.

对于数字或者字符串等基本数据类型来说,它的id就是它自身的值。因此数组中是不允许存在两个相同的数字的。为了规避这个错误,需要定义自己的track by表达式。

// 业务上自己生成唯一的id
1. item in items track by item.id

//或者直接拿循环的索引变量$index来用
2. item in items track by $index

另外:如果集合是Javascript对象类型数据,那么就算值一摸一样,ng-repeat也不会认为这是相同的对象。

如果将上面的代码中dataList,那么是不会报错的。比如$scope.dataList = [{"num":10},{"num":10}];

参考文章:http://blog.csdn.net/aitangyong/article/details/44100921

时间: 2024-11-05 11:14:12

angular ng-repeat使用及注意事项的相关文章

angular ng build 报错 Cannot read property &#39;default&#39; of undefined

95% emitting index-html-webpack-plugin Cannot read property 'default' of undefinedTypeError: Cannot read property 'default' of undefined at compiler.hooks.emit.tapPromise (E:\projects\node_modules\@angular-devkit\build-angular\src\angular-cli-files\p

Part 6 AngularJS ng repeat directive

ng-repeat is similar to foreach loop in C#. Let us understand this with an example. Here is what we want to do. 1. For each employee we have in the employees array we want a table row. With in each cell of the table row we to display employee Firstna

angular ng指令

1.指令 ng-app,ng- 都是angular的指令系统ng-app: ng-app是angular的初始化,一个页面只能有一个ng-app,位置不限制.在页面上加入了这个执行,那么从当前的元素以及儿子元素,都交给angular管理,不赋值的话,会有一个默认模块.ng-app="myApp"这里如果加了自定义的名字,那么必须创建对应的模块.ng-model:双向绑定数据 ng-init:给字段赋予初始值.ng-init="val=0". ng-bind:单向绑定

Angular入门

Angular入门 这个系列一共会涉及两个JavaScript框架的讲解,一个是Express用做后端,一个是Angular用于前端.和Express一样,Angular分离内容,处理视图.数据和逻辑.和MVC模式很相似,但其实Angular定义是MVW框架,W代表(what ever works for you).意味着它可以是控制器或者视图模型,或者服务,就看你怎么定义的.这一节会介绍基本的Angular知识:然后改造我们之前做的页面:并且调用之前的定义的api来获取数据. Angular的

Nodejs之MEAN栈开发(五)-- Angular入门与页面改造

这个系列一共会涉及两个JavaScript框架的讲解,一个是Express用做后端,一个是Angular用于前端.和Express一样,Angular分离内容,处理视图.数据和逻辑.和MVC模式很相似,但其实Angular定义是MVW框架,W代表(what ever works for you).意味着它可以是控制器或者视图模型,或者服务,就看你怎么定义的.这一节会介绍基本的Angular知识:然后改造我们之前做的页面:并且调用之前的定义的api来获取数据. Angular的数据绑定是指视图的改

angular和vue的对比,几个总结:

首先都是双向数据绑定,前后分离的武器之一,不同点,ng庞大,功能更复杂,有时候用在手机端可能不是很好,而vue就是迷你版的angular,好比,jq和zepto的区别 1.controller,对应到vue里面就是new Vue({el:}),这个el,页面上,ng需要写控制器名字,vue不需要, 2.ng自带http服务,vue没有,需要下载vue-resource,当然这个也不大,就12k左右: 3.ng的指令,对应vue的组件,不理解的可以认为是jq的插件,区别是ng是directive,

Node.js开发入门—引入UIBootstrap

很多Web管理系统的侧边菜单是可折叠的(手风琴样式),我们在前面两篇文章里的HTML模板,自己用div.css做了一些处理,可效果不好.所以我请来了一个前端UI框架,UI Bootstrap,来帮忙.别看它名字里带一个Bootstrap,但它并不依赖Bootstrap,而是用AngularJS实现的原生指令哦.我讨厌太多的依赖,这个我喜欢. 这篇我们以"Angular简单示例"里的AngularDemo为基础,我说到的目录什么的,都遵循express应用的默认目录结构. UI Boot

[译]用AngularJS构建大型ASP.NET单页应用(三)

原文地址:http://www.codeproject.com/Articles/808213/Developing-a-Large-Scale-Application-with-a-Single AngularUI 下面的示例中使用了AngularUI的各种UI组件.AngularUI 是AngularJS 框架的一个辅助套件.示例中使用的主要组件大部分来在AngularUI 的一个子集UI Bootstrap.UI Bootstrap是从Twitter Bootstrap派生出来的,它使用A

abp+angular2 导航栏添加菜单

理清思路,记录以备忘. XPName:项目名称 XEName:菜单名称 X:\XPName\angular>:命令行路径 第一步: XPName.AngularUI/src/shared/layout/topbar.component.ts文件内添加 menuItems: MenuItem[] = [       ...        new MenuItem("XEName", "", "fa fa-calendar-o", "

table sorting&ndash;angularjs

1: <script type="text/javascript" ng:autobind 2: src="http://code.angularjs.org/0.10.5/angular-0.10.5.js"></script> 3:   4: <table ng:controller="SortableTableCtrl"> 5: <thead> 6: <tr> 7: <th