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 相关文章推荐
js判断浏览器的比较全的代码
Feb 13 Javascript
纯Javascript实现Windows 8 Metro风格实现
Oct 15 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
May 25 Javascript
介绍JavaScript中Math.abs()方法的使用
Jun 14 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
May 09 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
Node 自动化部署的方法
Oct 17 Javascript
vue.js  父向子组件传参的实例代码
Oct 29 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
JS图片预加载三种实现方法解析
May 08 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
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
简单理解js的冒泡排序
2016/12/19 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
pyramid配置session的方法教程
2013/11/27 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
利用Python计算KS的实例详解
2020/03/03 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
岗位说明书范文
2014/05/07 职场文书
2014年挂职干部工作总结
2014/12/06 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
spring boot实现文件上传
2022/08/14 Java/Android