angular实现商品筛选功能


Posted in Javascript onFebruary 01, 2017

一、demo功能分析

1、通过service()创建数据并遍历渲染到页面
2、根据输入框的输入值进行字段查询
3、点击各列实现排序功能。

二、实现

1.1 数据定义与渲染

angular更偏向于是一个MVVM模式的框架,所以它的controller很薄,里面的业务逻辑也是少的,因此应该养成把逻辑写在service或者Factory等angular提供的可以自定义服务的方法中。此次demo通过angular的service方法来注册并定义商品数据。

angular.module("app",[])
.service("productData",function(){
  //通过service方法来定义数据,也可以通过factory方法来定义
  return [
    {
      id:1002,
      name:'HuaWei',
      quantity:200,
      price:4300
    },
    {
      id:2123,
      name:'iphone7',
      quantity:38,
      price:6300
    },
    {
      id:3001,
      name:'XiaoMi',
      quantity:3,
      price:2800
    },
    {
      id:4145,
      name:'Oppo',
      quantity:37,
      price:2100
    },
    {
      id:5563,
      name:'Vivo',
      quantity:23,
      price:2100
    }
  ]
})
//传入用service定义的productData数据依赖
.controller("myCtrl",function($scope,productData){
  $scope.data=productData; //进行相应赋值

  $scope.order=''; //单列排序用,后面详解
  $scope.changeOrder=function(type){
    $scope.orderType=type;
    if($scope.order===''){
      $scope.order='-';
    }else{
      $scope.order='';
    }
  }
})

数据渲染部分:

<table class="table">
      <thead>
      <tr>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('id')">产品编号<span class="caret"></span></th>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('name')">产品各称<span class="caret"></span></th>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('price')">产品价钱<span class="caret"></span></th>
      </tr>
      </thead>
      <tbody>
      <tr ng-repeat="value in data|filter:{id:search}|orderBy:order+orderType">
        <td>{{value.id}}</td>
        <td>{{value.name}}</td>
        <td>{{value.price}}</td>
      </tr>
      </tbody>

    </table>

说明:上面利用了bootstrap的caret类名来显示出三角符号,并通过给父元素加dropup使三角符号转向。
1、三角符号的转向与否由ng-class指令确定,传入表达式,当order===‘ '时,为true,则给th加上dropup类名
2、用ng-click指令绑定点击事件,实现点击就切换排序方式

2.2 搜索功能

采用angular的filter过滤器,搜索输入字段

<!--输入框采用ng-model绑定一个值-->
 搜索:<input type="text" ng-model="search">
 <!--通过filter:{id:search}实现以id为搜索内容,以search的值为搜索基准-->
 <tr ng-repeat="value in data|filter:{id:search}|orderBy:order+orderType">
        <td>{{value.id}}</td>
        <td>{{value.name}}</td>
        <td>{{value.price}}</td>
      </tr>

2.3 排序功能

1、定义order属性用于设置正序还是反序
2、定义orderType属性用于设置参考排序的值
3、定义changeOrder()方法用于实现点击就切换排序的功能

$scope.order=''; //当order为‘'时正序
 $scope.changeOrder=function(type){ //传入属性名,以此为基准排序
   $scope.orderType=type;
   if($scope.order===''){
     $scope.order='-'; //order为'-'时,反序
   }else{
     $scope.order='';
   }
 }

页面中:changeOrder()函数传入“类型”作为参数,并在函数内部通过\ $scope.orderType=type;设定排序的参考类型

<table class="table">
      <thead>
      <tr>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('id')">产品编号<span class="caret"></span></th>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('name')">产品各称<span class="caret"></span></th>
        <th ng-class="{dropup:order===''}" ng-click="changeOrder('price')">产品价钱<span class="caret"></span></th>
      </tr>
      </thead>
      <tbody>
        <tr ng-repeat="value in data|filter:{id:search}|orderBy:order+orderType">
          <td>{{value.id}}</td>
          <td>{{value.name}}</td>
          <td>{{value.price}}</td>
        </tr>
      </tbody>
    </table>

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

Javascript 相关文章推荐
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
Aug 22 Javascript
jquery带翻页动画的电子杂志代码分享
Aug 21 Javascript
jquery获取img的src值的简单实例
May 17 Javascript
浅谈jQuery 选择器和dom操作
Jun 07 Javascript
AngularJS中的拦截器实例详解
Apr 07 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
Oct 26 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
Feb 23 Javascript
LayerClose弹窗关闭刷新方法
Aug 17 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
vue.js实现三级菜单效果
Oct 19 Javascript
原生JavaScript创建不可变对象的方法简单示例
May 07 Javascript
Bootstarp基本模版学习教程
Feb 01 #Javascript
angular实现表单验证及提交功能
Feb 01 #Javascript
Javascript基础回顾之(三) js面向对象
Jan 31 #Javascript
Javascript基础回顾之(二) js作用域
Jan 31 #Javascript
Javascript基础回顾之(一) 类型
Jan 31 #Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
Jan 30 #Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 #Javascript
You might like
大师制作的中短波矿石收音机
2020/04/02 无线电
php 阴历-农历-转换类代码
2012/01/16 PHP
PHP中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
PHP实现简单计算器小程序
2020/08/28 PHP
Yii框架组件的事件机制原理与用法分析
2020/04/07 PHP
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
javascript常用功能汇总
2015/07/05 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
Python数据持久化shelve模块用法分析
2018/06/29 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
numpy.array 操作使用简单总结
2019/11/08 Python
为什么黑客都用python(123个黑客必备的Python工具)
2020/01/31 Python
Python列表操作方法详解
2020/02/09 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
2020/02/25 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
Collection和Collections的区别
2016/05/02 面试题
抽奖活动主持词
2014/03/31 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
体育教师教学随笔
2015/08/15 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
对讲机的最大通讯距离是多少
2022/02/18 无线电
springboot用户数据修改的详细实现
2022/04/06 Java/Android
Elasticsearch6.2服务器升配后的bug(避坑指南)
2022/09/23 Servers