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 有趣而诡异的数组
Apr 06 Javascript
JavaScript对象链式操作代码(jquery)
Jul 04 Javascript
jQuery Jcrop插件实现图片选取功能
Nov 23 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
Jun 05 Javascript
详解JavaScript中基于原型prototype的继承特性
May 05 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
jQuery实现的放大镜效果示例
Sep 13 Javascript
微信小程序实现图片上传功能
May 28 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
Sep 30 Javascript
微信小程序自定义弹窗wcPop插件
Nov 19 Javascript
深入理解Antd-Select组件的用法
Feb 25 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
Apr 01 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三维数组去重(示例代码)
2013/11/26 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
Jquery 绑定时间实现代码
2011/05/03 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
Python selenium 三种等待方式解读
2016/09/15 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
详解Python中的路径问题
2020/09/02 Python
Puma印度官网:德国运动品牌
2019/10/06 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
营业员演讲稿
2013/12/30 职场文书
《蓝色的树叶》教学反思
2014/02/24 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
初中作文评语
2014/12/25 职场文书
2015年实习单位评语
2015/03/25 职场文书
2017年寒假社区服务活动总结
2016/04/06 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python