Vue.js学习之过滤器详解

作者:Jone_chen 时间:2024-05-09 10:40:38 

前言

在这个教程中,我们将会通过几个例子,了解和学习VueJs的过滤器。阅读这这篇文中的前提是你对Vue已经有了基本的语法基础。

Vue.Js中的过滤器基础

过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档, http://cn.vuejs.org/api/#过滤器 ,过滤器通常会使用管道标志 “ | ”, 比如:


{{ 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);
}
}
})

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

来源:http://www.cnblogs.com/jone-chen/p/5846500.html

标签:vue.js,过滤器
0
投稿

猜你喜欢

  • 浅谈Laravel模板实体转义带来的坑

    2024-06-05 09:44:24
  • python实现简单的飞机大战游戏

    2023-08-28 01:50:50
  • 如何用Python进行回归分析与相关分析

    2023-11-24 01:08:14
  • mysql查询的时候给字段赋默认值操作

    2024-01-15 02:51:53
  • 提高JavaScript执行效率的23个实用技巧

    2023-08-15 18:38:12
  • 数据清洗之如何用一行Python代码去掉文本中的各种符号

    2023-10-04 12:39:25
  • 微信小程序使用navigator实现页面跳转功能

    2024-04-25 10:36:14
  • 深入了解vue-router原理并实现一个小demo

    2024-04-30 10:25:31
  • 表单特殊输入js验证

    2008-03-26 12:01:00
  • Python中关于使用模块的基础知识

    2022-11-10 04:11:21
  • Golang通脉之数据类型详情

    2023-07-14 05:37:03
  • SQL Server:触发器实例详解

    2024-01-26 03:25:47
  • 在EF中使用MySQL的方法及常见问题

    2024-01-28 11:22:03
  • pytorch随机采样操作SubsetRandomSampler()

    2021-05-22 18:00:46
  • python matplotlib绘制三维图的示例

    2023-03-04 16:35:48
  • 详解Python的三种拷贝方式

    2023-04-20 19:39:20
  • JavaScript 组件之旅(一):分析和设计

    2009-09-21 10:52:00
  • 朋友去一家游戏公司的机试题,被难住了

    2009-11-29 15:23:00
  • Python中Django框架下的staticfiles使用简介

    2022-08-18 14:04:40
  • 互联网产品设计师自我介绍

    2009-04-16 12:45:00
  • asp之家 网络编程 m.aspxhome.com