ngrepeat 时注意的地方和一些little tricks
angularjs的一些使用经验总结,此篇文章单谈ng指令之一ngrepeat
1. ngrepeat 时报错 Duplicates in a repeater are not allowed,
正常的时候,我们表达式内的数据是类似这样的(这时不会有任何问题)
- <span ng-repeat="answer in ['good answer','perfect answer', 'bad answer','not bad answer'] ">{{answer}} </span>
但一旦当我们表达式的数据取到的是类似这样的
- <span ng-repeat="answer in ['aa','bb','cc','cc','bb'] track by $index">{{answer}} </span>
便会报错 Duplicates in a repeater are not allowed,
此时他会用英文提示你 use track by 表达式
发生此错误的原因是 ngrepeat 的 数组或者对象数组或者对象 的每个迭代项中有重复值
因为当使用ngrepeat不加track by表达式时,默认的为 item in items is equivalent to item in items track by $id(item)
所以出现重复值时就会报错 页面repeat的那个dom元素不会在视图里显示出来
2.ngrepeat的filter
ng-repeat指令有一个特有的filter 名为filter的filter 用来对数据内容进行具体的过滤
同时当然也可以在使用angularjs框架的一些预先内置filter,如limitto (设置只显示一个)
ng-repeat="item in items | orderBy:'oreder_prop' | filter:query | limitTo:4" (类似这样的语法使用)
ng-repeat="course in home.my_join_course | limitTo:1"
对这个特别的名为filter的使用
- <div class="box">
- <div class="col-xs-12">
- <div ng-init="output = [{name:'a',addr:'东京',score:22},{name:'b',addr:'西京',score:10},{name:'c',addr:'南京'},{name:'d',addr:'北京',area:'china'}]" >
<p ng-repeat="print in output | filter: 'china' ">{{print}}</p> <!-- 只显示属性值里有china的 -->
<p ng-repeat="print in output | filter: {name:'b'} ">{{print}}</p> <!-- 只显示name属性值里有b的 -->- <p ng-repeat="print in output | filter: have_score_than_15 ">{{print}}</p>
<!-- 只显示score属性大于15的 即只显示name:a,addr:东京,score:22的那项 -->
</div>- </div>
- </div>
- $scope.have_score_than_15 = function(item) {
return item.score > 15;
}
另外再简单介绍下排序 (这点直接引用:http://www.geekcome.com/content-10-1906-1.html )如下
- <div>{{ childrenArray | orderBy : 'age' }}</div> //按age属性值进行排序,若是-age,则倒序
- <div>{{ childrenArray | orderBy : orderFunc }}</div> //按照函数的返回值进行排序
- <div>{{ childrenArray | orderBy : ['age','name'] }}</div> //如果age相同,按照name进行排序
此外还可以支持自定义过滤器满足一些复杂的自定义操作如
- <div ng-repeat=" depart in departments | child_department "> .... </div>
- appFilters.filter('child_department',function () {
- return function (departments) {
var departmentId = 3;- var array = [];
- $.each(departments,function(i,n){
- if(n.parent_id == departmentId){
- array.push(n);
- }
- });
- return array;
- }
- });
3.活用 $index $first $middle $last $even $odd
- <ul class="dropdown-menu pull-right dropdown-menu-right" >
- <li app-pressdark ng-click="course_filter('','depart','全部科室')" class="dropdown-divider">全部科室</li>
- <li app-pressdark ng-repeat="depart in departs | filter:{parent_id:null}" ng-click="course_filter(depart.id,'depart',depart.name)" class="{{$last?'dropdown-nodivider':'dropdown-divider'}} ">
{{depart.name}}
</li>- </ul>
在 class="{{$last?'dropdown-nodivider':'dropdown-divider'}} " 上利用三元表达式对repeat的项进行个别的样式处理
$index |
number | iterator offset of the repeated element (0..length-1) |
$first |
boolean | true if the repeated element is first in the iterator. |
$middle |
boolean | true if the repeated element is between the first and last in the iterator. |
$last |
boolean | true if the repeated element is last in the iterator. |
$even |
boolean | true if the iterator position $index is even (otherwise false). |
$odd |
ngrepeat 时注意的地方和一些little tricks的更多相关文章
- 在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index
在angular中使用ng-repeat时数组中有重复元素,要用item in items track by $index,不然会报错 <div class="" ng-in ...
- Java 中long类型转换成为int类型时可能会出错的地方
那计算两个日期之间间隔的天数为例来说明这个问题. 下面是计算日期间隔天数的简单算法(主要出错的地方为红色标注的地方): public int getDay(String startDate, Stri ...
- angular 当使用ng-repeat 时出现 $$hashKey的键值对
小问题 把: ng-repeat="item in items " 改成 : ng-repeat="item in items track by $index"
- Properties没有被注意的地方
源起: 今天阅读源码时发现一个地方不理解: 为什么以下代码第10行 get() 之后value为null时还去 getProperty() 呢? org.springframework.util.Co ...
- oracle 使用count()函数进行分组计数时所踩的坑!
1.情景展示 需要对id_card字段按字符长度进行分组统计并进行计数. 2.错误方式 第一步:统计出id_card字段共存在几种情况. 第一种方式:distinct 第二种方式:group by ...
- 面试题HTML +CSS
HTML+CSS部分1.行内元素和块级元素?img算什么?行内元素怎么转化为块级元素?行内元素:和有他元素都在一行上,高度.行高及外边距和内边距都不可改变,文字图片的宽度不可改变,只能容纳文本或者其他 ...
- AngularJS 开发中常犯的10个错误
简介 AngularJS是目前最为活跃的Javascript框架之一,AngularJS的目标之一是简化开发过程,这使得AngularJS非常善于构建小型app原型,但AngularJS对于全功能的客 ...
- AngularJS开发人员最常犯的10个错误
简介AngularJS是目前最为活跃的Javascript框架之一,AngularJS的目标之一是简化开发过程,这使得AngularJS非常善于构建小型app原型,但AngularJS对于全功能的客户 ...
- AngularJS开发最常犯的10个错误
简介 AngularJS是目前最为活跃的Javascript框架之一,AngularJS的目标之一是简化开发过程,这使得AngularJS非常善于构建小型app原型,但AngularJS对于全功能的客 ...
随机推荐
- python__基础 : 异常处理与自定义异常
异常处理方法一般为: try: ------code----- except Exception as e: # 抛出异常之后将会执行 print(e) else: # 没有异常将会执行 print( ...
- Linux入门篇(五)——Shell(一)
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- MySQL忘记密码怎么重置
1打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 输入命令 mysqld --skip-grant-tables 回车,此时就跳过了mysql的用户验证.注意输入此命令之后 ...
- python Beautiful Soup库入门
bs4库的HTML内容遍历方法 基于bs4库的HTML格式输出 显示:友好的显示 <tag>.prettify() 编码:bs4库将任何HTML输入都变成utf-8编码(python 3. ...
- spark练习---ip匹配以及广播的特性
今天,我们还是在介绍spark的小练习,这次的小练习还是基于IP相关的操作,我们可以先看一下今天的需求,我们有两个文件, 第一个文件,是IP的字典,也就是我们上一篇介绍过的,就是表明了所有IP字段所属 ...
- jdk1.8源码学习笔记
前言: 前一段时间开始学习了一些基本的数据结构和算法,算是弥补了这方面的知识短板,但是仅仅是对一些算法的了解,目前工作当中也并没有应用到这些,因此希望通过结合实际例子来学习,巩固之前学到的内容,思前想 ...
- 关于学习less后一些感悟
学习了一天的less发现,自己被自己弄的晕头转向,好在是学明白了! 一.写自己的第一个less css样式编程: 网址:http://www.1024i.com/demo/less/document. ...
- java程序——随机数求和
设计思路:用随机算法随机生成10个数(0~100),循环填充一个数组,然后在循环中显示数组内容,接着用一个循环计算数组元素的和,将结果也显示在消息框中. 流程图: 源代码: package test; ...
- CSS计数器(自定义列表)Demo
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 4.Mongodb数据查询2
1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 ...