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 相关文章推荐
学习jquery必备 api中英文对照的chm手册 下载
May 03 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
jquery获取选中的文本和值的方法
Jul 08 Javascript
javascript常用代码段搜集
Dec 04 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
jQuery fadeOut 异步实例代码详解
Aug 18 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
微信小程序之分享页面如何返回首页的示例
Mar 28 Javascript
QRCode.js二维码生成并能长按识别
Oct 16 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
如何封装Vue Element的table表格组件
Feb 06 Vue.js
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使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
jQuery实现瀑布流的取巧做法分享
2015/01/12 Javascript
jQuery中的on与bind绑定事件区别实例详解
2017/02/28 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
Python实现excel转sqlite的方法
2017/07/17 Python
python+opencv识别图片中的圆形
2020/03/25 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
Django文件存储 默认存储系统解析
2019/08/02 Python
python不使用for计算两组、多个矩形两两间的iou方式
2020/01/18 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
H5新属性audio音频和video视频的控制详解(推荐)
2016/12/09 HTML / CSS
求职信内容考虑哪几点
2013/10/05 职场文书
留学自荐信的技巧
2013/10/17 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
检讨书大全
2015/01/27 职场文书
稽核岗位职责
2015/02/10 职场文书
检察院起诉书
2015/05/20 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript