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 相关文章推荐
CCPry JS类库 代码
Oct 30 Javascript
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
使用jquery读取html5 localstorage的值的方法
Jan 04 Javascript
jquery attr方法获取input的checked属性问题
May 26 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
Jun 16 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
json格式的javascript对象用法分析
Jul 04 Javascript
原生JS实现图片左右轮播
Dec 30 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
Jan 21 Javascript
js轮播图之旋转木马效果
Oct 13 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 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
str_replace只替换一次字符串的方法
2013/04/09 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
nginx下安装php7+php5
2016/07/31 PHP
总结PHP中数值计算的注意事项
2016/08/14 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
可简单避免的三个JS发布错误的详细介绍
2013/08/02 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
jquery改变tr背景色的示例代码
2013/12/28 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
js实现微信分享代码
2020/10/11 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Vue-cli@3.0 插件系统简析
2018/09/05 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
Vue环境搭建+VSCode+Win10的详细教程
2020/08/19 Javascript
通过滑动翻页效果实现和移动端click事件问题
2021/01/26 Javascript
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
python通过get,post方式发送http请求和接收http响应的方法
2015/05/26 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
python保存数据到本地文件的方法
2018/06/23 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物