Angular ng-repeat指令实例以及扩展部分


Posted in Javascript onDecember 26, 2016

在前面的文章中学习filter过滤器,现在在结合着看看ng-repeat指令,举个例子。

<div ng-controller="Aaa">
 <table border="1">
 <tr>
  <th ng-click="fnSort('name')">颜色</th>
  <th ng-click="fnSort('age')">值</th>
 </tr>
 <tr ng-repeat="data in dataList">
  <td>{{data.name}}</td>
  <td>{{data.age}}</td>
 </tr>
 </table>
</div>
<script type="text/javascript">

 var m1 = angular.module('myApp',[]);

 m1.controller('Aaa',['$scope','$filter',function($scope,$filter){
 $scope.dataList = [
  {name : 'red',age : 20},
  {name : 'yellow',age : 30},
  {name : 'blue',age : 40},
  {name : 'green',age : 50}
 ];
 $scope.fnSort = function(type){
  arguments.callee['fnSort' + type] = !arguments.callee['fnSort' + type];
  $scope.dataList = $filter('orderBy')($scope.dataList,type,arguments.callee['fnSort' + type]);
 };
 }]);

</script>

先介绍一下ng-repeat指令,他是用来遍历数据的。

ng-repeat="data in dataList",dataList是控制器里的数据,data就好比变量名,视图里的{{data.name}}表示数据里name对象。

其他的在前面都介绍过了。

在颜色和值上面绑定了fnSort方法,在fnSort方法里接受类型。

arguments.callee['fnSort' + type] = !arguments.callee['fnSort' + type]; 这句代码得到一个布尔值,来使用filter的排序方法来控制数据的正反排序。

上面的例子很简单,我们再为它加上一个搜索的功能!

<div ng-controller="Aaa">
 <input type="text" ng-model="filterVal"><input type="button" ng-click="fnSearch()" value="搜索">
 <table border="1">
 <tr>
  <th ng-click="fnSort('name')">颜色</th>
  <th ng-click="fnSort('age')">值</th>
 </tr>
 <tr ng-repeat="data in dataList">
  <td>{{data.name}}</td>
  <td>{{data.age}}</td>
 </tr>
 </table>
</div>

<script type="text/javascript">

 var m1 = angular.module('myApp',[]);

 m1.controller('Aaa',['$scope','$filter',function($scope,$filter){
 $scope.dataList = [
  {name : 'red',age : 20},
  {name : 'yellow',age : 30},
  {name : 'blue',age : 40},
  {name : 'green',age : 50}
 ];
 $scope.fnSort = function(type){
  arguments.callee['fnSort' + type] = !arguments.callee['fnSort' + type];
  $scope.dataList = $filter('orderBy')($scope.dataList,type,arguments.callee['fnSort' + type]);
 };
 $scope.fnSearch = function(){
  $scope.dataList = $filter('filter')($scope.dataList,$scope.filterVal);
 };
 }]);

</script>

我们声明了一个fnSearch方法,接受在视图中的ng-model数据,再使用filter的筛选功能,是不是很方便,回想下如果是用JQ来实现需要多少代码。

假设我们搜索'l',那麽yellow和blue会正常的筛选出来。

Angular ng-repeat指令实例以及扩展部分

并没有问题,如果在次输入'r',应该会筛选出red和green才对!可是我们发现什麽都没有。。。

Angular ng-repeat指令实例以及扩展部分

注意fnSearch方法里的这句代码,$scope.dataList = $filter('filter')($scope.dataList,$scope.filterVal); 我们在$scope.dataList数据里搜索,$scope.dataList在上一次搜索里,就仅剩yellow和blue两条数据,所以就搜索不到关于'r'的数据了,这个时候就声明一个局部的变量,方便第二次搜索依然是完整的数据。

完整代码:

<div ng-controller="Aaa">
 <input type="text" ng-model="filterVal"><input type="button" ng-click="fnSearch()" value="搜索">
 <table border="1">
 <tr>
  <th ng-click="fnSort('name')">颜色</th>
  <th ng-click="fnSort('age')">值</th>
 </tr>
 <tr ng-repeat="data in dataList">
  <td>{{data.name}}</td>
  <td>{{data.age}}</td>
 </tr>
 </table>
</div>

<script type="text/javascript">

 var m1 = angular.module('myApp',[]);

 m1.controller('Aaa',['$scope','$filter',function($scope,$filter){
 var oriArr = [
  {name : 'red',age : 20},
  {name : 'yellow',age : 30},
  {name : 'blue',age : 40},
  {name : 'green',age : 50}
 ];
 $scope.dataList = oriArr;
 $scope.fnSort = function(type){
  arguments.callee['fnSort' + type] = !arguments.callee['fnSort' + type];
  $scope.dataList = $filter('orderBy')($scope.dataList,type,arguments.callee['fnSort' + type]);
 };
 $scope.fnSearch = function(){
  $scope.dataList = $filter('filter')(oriArr,$scope.filterVal);
 };
 }]);

</script>

上面用了ng-repeat只是最简单的遍历,现在看看ng-repeat的扩展部分。

ng-repeat-start以及ng-repeat-end,他们可以灵活控制遍历形式。

<div ng-controller="Aaa">
 <div ng-repeat-start="data in dataList" class="active">{{data.name}}</div>
 <p>{{data.age}}</p>
 <div ng-repeat-end>{{data.name}}</div>
</div>

<script type="text/javascript">
 var m1 = angular.module('myApp',[]);
 m1.controller('Aaa',['$scope',function($scope){
 $scope.dataList = [
  {name : 'red',age : 20},
  {name : 'yellow',age : 30},
  {name : 'blue',age : 40},
  {name : 'green',age : 50}
 ];
 }]);

</script>

除此之外,还有6中扩展方法,还是上面的例子。

<div ng-controller="Aaa">
 <ul>
  <li class="{{$even ? 'active' : ''}}" is-even="{{$even}}" ng-repeat="data in dataList" data-i="{{$index}}">{{data.name}}</li>
  <!-- $index 索引,值 -->
  <!-- $first 第一个值,布尔类型 -->
  <!-- $last 最後一个值,布尔类型 -->
  <!-- $middle 去除头尾的中间项,布尔类型 -->
  <!-- $even 奇数,布尔类型 -->
  <!-- $odd 偶数,布尔类型 -->
 </ul>
</div>

<script type="text/javascript">

 var m1 = angular.module('myApp',[]);

 m1.controller('Aaa',['$scope',function($scope){
  $scope.dataList = [
   {name : 'red',age : 20},
   {name : 'yellow',age : 30},
   {name : 'blue',age : 40},
   {name : 'green',age : 50}
  ];
 }]);

</script>

这6中扩展方法除了索引之外,都是布尔类型。

Angular ng-repeat指令实例以及扩展部分

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
分享20款好玩的jQuery游戏
Apr 17 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
JavaScript的21条基本知识点
Mar 04 Javascript
jQuery中:only-child选择器用法实例
Jan 03 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
JavaScript数组排序功能简单实现
May 14 Javascript
js实现翻牌小游戏
Jul 31 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 #Javascript
Angular路由简单学习
Dec 26 #Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 #Javascript
Angular工具方法学习
Dec 26 #Javascript
angular双向绑定模拟探索
Dec 26 #Javascript
jquery Banner轮播选项卡
Dec 26 #Javascript
Javascript中常用类型的格式化方法小结
Dec 26 #Javascript
You might like
PHP4实际应用经验篇(8)
2006/10/09 PHP
php数组中删除元素的实现代码
2012/06/22 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php堆排序实现原理与应用方法
2015/01/03 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
jQuery timers计时器简单应用说明
2010/10/28 Javascript
在子窗口中关闭父窗口的一句代码
2013/10/21 Javascript
对Jquery中的ajax再封装,简化操作示例
2014/02/12 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
谈谈javascript中使用连等赋值操作带来的问题
2015/11/26 Javascript
vue组件间通信解析
2017/03/01 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
vue写一个组件
2018/04/09 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Nodejs文件上传、监听上传进度的代码
2020/03/27 NodeJs
Vant picker 多级联动操作
2020/11/02 Javascript
微信 用脚本查看是否被微信好友删除
2016/10/28 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
Python实现k-means算法
2018/02/23 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
英国最大的笔记本电脑直销专家:Laptops Direct
2019/07/20 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
体育专业个人求职信范文
2013/12/27 职场文书
自主招生学校推荐信
2014/09/26 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis
MySQL事务的隔离级别详情
2022/07/15 MySQL