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判断录入的日期是否合法
Jan 08 Javascript
海量经典的jQuery插件集合
Jan 12 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
顶部缓冲下拉菜单导航特效的JS代码
Aug 27 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
JavaScript入门基础
Aug 12 Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
May 24 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
vue自定义过滤器创建和使用方法详解
Nov 06 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
May 13 jQuery
JavaScript实现页面高亮操作提示和蒙板
Jan 04 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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
php实现多城市切换特效
2015/08/09 PHP
详解php用static方法的原因
2018/09/12 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
深入理解 Python 中的多线程 新手必看
2016/11/20 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
2017/09/30 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python安装Flask环境及简单应用示例
2019/05/03 Python
python requests使用socks5的例子
2019/07/25 Python
python numpy 反转 reverse示例
2019/12/04 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
如何将字串String转换成整数int
2015/02/21 面试题
群众路线批评与自我批评
2014/02/06 职场文书
优秀公益广告词大全
2014/03/19 职场文书
给校长的建议书200字
2014/05/16 职场文书
服装设计专业自荐信
2014/06/17 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript