当前位置: 移动技术网 > IT编程>脚本编程>vue.js > Vue.js -- 过滤器使用总结

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

2018年05月03日  | 移动技术网IT编程  | 我要评论

五月天新专辑,marketiva中文社区,老河口社区

过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。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);
    }
  }
}) 

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网