Vue.js -- 过滤器使用总结


Posted in Javascript onFebruary 18, 2017

过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,过滤器通常会使用管道标志 “ | ”, 比如:

{{ msg | capitalize }}
// 'abc' => 'ABC'

uppercase过滤器 : 将输入的字符串转换成大写字母的过滤器。

VueJs允许你链式调用过滤器,简单的来说,就是一个过滤器的输出成为下一个过滤器的输入,然后再次过滤。接下来,我们可以想象一个比较简单的例子,使用了Vue的 filterBy + orderBy 过滤器来过滤所有商品products。过滤出来的产品是属于水果类商品。

filterBy过滤器 : 过滤器的值必须是一个数组,filterBy + 过滤条件。过滤条件是:'string || function'+ in 'optionKeyName'

orderBy过滤器 : 过滤器的值必须是一个数组,orderBy + 过滤条件。过滤条件是:'string || array ||function' + 'order ≥ 0 为升序 || order < 0 为降序'

接下来,我们可以看下下面这个例子:我们有一个商品数组products,我们希望遍历这个数组,并把他们打印成一张清单,这个用v-for很容易实现。

<ul class="product">
  <li v-for="product in products|filterBy '水果' in 'category' |orderBy 'price' 1">
    {{product.name}}-{{product.price | currency}}
  </li>
</ul>

上面的例子,就是用filterBy 过滤在 'category'中含有'水果' 关键字的列表,返回的列表就是只含有 '水果' 关键字的列表,而orderBy过滤器是根据价格做了一个升序,如果想要降序,只需要加一个小于0的参数;

自定义过滤器

虽然VueJs给我们提供了很多强有力的过滤器,但有时候还是不够。值得庆幸的,Vue给我们提供了一个干净简洁的方式来定义我们自己的过滤器,之后我们就可以利用管道 “ | ” 来完成过滤。

定义一个全局的自定义过滤器,需要使用Vue.filter()构造器。这个构造器需要两个参数。

Vue.filter() Constructor Parameters:

1.filterId: 过滤器ID,用来做为你的过滤器的唯一标识;

2.filter function: 过滤器函数,用一个function来接收一个参数,之后再将接收到的参数格式化为想要的数据结果。

上面的例子中,我们要实现商品价格打5折该怎么做呢?其实就是实现的一个自定义的过滤器,表示将商品的价格打了5折;而要实现它,需要完成的是:

a、使用Vue.filter()构造器创建一个过滤器叫做discount

b、输入商品的原价,能够返回其打五折之后的折扣价

代码见下面:

Vue.filter('discount', function(value) {
  return value * .5;
});
var product = new Vue({
  el: '.product',
  data: {
    products: [
      {name: '苹果',price: 25,category: "水果"}, 
      {name: '香蕉',price: 15,category: "水果"}, 
      {name: '雪梨',price: 65,category: "水果"}, 
      {name: '宝马',price: 2500,category: "汽车"},
      {name: '奔驰',price: 10025,category: "汽车"}, 
      {name: '柑橘',price: 15,category: "水果"}, 
      {name: '奥迪',price: 25,category: "汽车"}
    ]
  },
})

现在就可以像使用Vue自带的过滤器一样使用自定义过滤器了

<ul class="product">
  <li v-for="product in products|filterBy '水果' in 'category' |orderBy 'price' 0">
    {{product.name}}-{{product.price|discount | currency}}
  </li>
</ul>

上面代码实现的商品打5折,而如果要实现价格打任意折扣呢?应该在discount过滤器里增加一个折扣数值参数,改造一下我们的过滤器。

Vue.filter('discount', function(value, discount) {
  return value * (discount / 100);
});

然后重新调用我们的过滤器

<ul class="product">
  <li v-for="product in products|filterBy '水果' in 'category' |orderBy 'price' 0">
    {{product.name}}-{{product.price|discount 25 | currency}}
  </li>
</ul>

我们也可以在我们Vue实例里构造我们的过滤器,这样构造的好处是,这样就不会影响到其他不需要用到这个过滤器的Vue实例。

/*定义在全局 
Vue.filter('discount', function(value,discount) {
  return value * ( discount / 100 ) ;
});
*/
var product = new Vue({
  el: '.product',
  data: {
    products: [
      {name: '苹果',price: 25,category: "水果"}, 
      {name: '香蕉',price: 15,category: "水果"}, 
      {name: '雪梨',price: 65,category: "水果"}, 
      {name: '宝马',price: 2500,category: "汽车"},
      {name: '奔驰',price: 10025,category: "汽车"}, 
      {name: '柑橘',price: 15,category: "水果"}, 
      {name: '奥迪',price: 25,category: "汽车"}
    ]
  },
  //自定义在实例
  filters: {
    discount: function(value, discount) {
      return value * (discount / 100);
    }
  }
})

定义在全局就能在所有的实例中调用过滤器,如果定义在了实例里就在实例里调用过滤器。 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js prototype 格式化数字 By shawl.qiu
Apr 02 Javascript
javascript之学会吝啬 精简代码
Apr 25 Javascript
基于MooTools的很有创意的滚动条时钟动画
Nov 14 Javascript
js触发select onchange事件的小技巧
Aug 05 Javascript
Grunt入门教程(自动任务运行器)
Aug 06 Javascript
jQuery zclip插件实现跨浏览器复制功能
Nov 02 Javascript
BootStrapValidator初使用教程详解
Feb 10 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
javascript实现放大镜功能
Dec 09 Javascript
JS打开摄像头并截图上传示例
Feb 18 #Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 #Javascript
AngularJS表单提交实例详解
Feb 18 #Javascript
JS实现控制图片显示大小的方法【图片等比例缩放功能】
Feb 18 #Javascript
JS实现数组去重复值的方法示例
Feb 18 #Javascript
bootstarp modal框居中显示的实现代码
Feb 18 #Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
Feb 18 #Javascript
You might like
php实现socket推送技术的示例
2017/12/20 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
删除节点的jquery代码
2014/01/13 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
canvas轨迹回放功能实现
2017/12/20 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
2019/12/29 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
详解javascript void(0)
2020/07/13 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
Python去除字符串两端空格的方法
2015/05/21 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
python 正确保留多位小数的实例
2018/07/16 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
给民警的表扬信
2014/01/08 职场文书
购房意向书范本
2014/04/01 职场文书
项目合作协议书
2014/04/16 职场文书
英文感谢信范文
2015/01/21 职场文书
物业保洁员管理制度
2015/08/05 职场文书