vue 内置过滤器的使用总结(附加自定义过滤器)


Posted in Javascript onDecember 11, 2018

前言

vue中过滤器filters的作用是什么?

过滤器是一个通过输入数据,能够及时对数据进行处理并返回一个数据结果的简单函数。Vue有很多很便利的过滤器,可以参考官方文档。

能够帮我们处理快速一些数据的格式----format数据格式化处理。

语法也很简单

{{ message | Filter }}
  • message: 要格式化的数据
  • Filter: 对数据格式化的方法

链式过滤

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

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

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

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

<li v-for="product in products">
 {{ product.name | capitalize }} - {{ product.price | currency }}
</li>

capitalize过滤器 : 将输入的字符串首字母转换成大写字母的过滤器。currency过滤器 : 将输入的数字转换成现金的过滤器。可以跟上货币符号(默认$)和保留的小数位(默认2)。

利用上面的两个过滤器,能够很好的把一个json数组的商品清单格式化成通熟易懂的商品价格清单。

如果只想要电器类商品,可以在v-for上加过滤条件:

<li v-for="product in products | filterBy 'electronics' in 'category' ">
 {{ product.name | capitalize }} - {{ product.price | currency }}
</li>

上面的例子,就是用filterBy 过滤在 'category'中含有'electronics' 关键字的列表,返回的列表就是只含有 'electronics' 关键字的列表。

如果想要多个搜索条件:

<li v-for="product in products | filterBy 'electronics' in 'category' 'name' ">
 {{ product.name | capitalize }} - {{ product.price | currency }}
</li>

上面的例子,就是用filterBy 过滤在 'category' 和 'name' 中含有'electronics' 关键字的列表。

最后我们还需要将这个列表用字母进行排序。我们可以在 filterBy 过滤器的基础上,链式调用orderBy 过滤器。

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

orderBy 的排序方式默认是升序,如果想要降序,只需要加一个小于0的参数:

<li v-for="product in products
  | filterBy 'electronics' in 'category'
  | orderBy 'name' -1 "
>

下面看看vue自带过滤器有哪些,并附带小示例。最后记得看看如果自定义过滤器哦!

vue自带的过滤器

capitalize(首字母大写)

<div class="test">
 {{message | capitalize}}
</div>

<script type="text/javascript">
var myVue = new Vue({
 el: ".test",
 data: {
 message: "javan"
 }
})
</script>

上面代码输出:Javan

uppercase(全部大写)

// 初始message:abc

{{message | uppercase}}

// 上面代码输出:ABC

lowercase(全部小写)

// 初始message:ABC

{{message | lowercase}}

// 上面代码输出:abc

currency(输出金钱以及小数点)

<div class="test">
 {{message | currency}} // 输出$520.13
 {{message | currency '¥' "2"}} //输出 $520.13
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 data: {
  message: "520.1314"
 }
 })
</script>

第一个参数 {String} [货币符号] - 默认值: '$'
第二个参数 {Number} [小数位] - 默认值: 2

pluralize(变复数)

如果只有一个参数,复数形式只是简单地在末尾添加一个 “s”。如果有多个参数,参数被当作一个字符串数组,对应一个、两个、三个…复数词。如果值的个数多于参数的个数,多出的使用最后一个参数。

<div class="test">
 {{message}} {{message | pluralize 'item'}} 输出: 1 item
 <ul v-for="item in lili">
 <li>
  {{item}} {{item | pluralize 'item'}}
  输出: 1 item 2 items 3 items
 </li>
 </ul>

 <ul v-for="item in lili">
 <li>
  {{item}} {{item | pluralize 'st' 'rd'}}
  输出: 1 st 2 rd 3 rd
 </li>
 </ul>

 <ul v-for="item in man">
 <li>
  {{item}} {{item | pluralize 'item'}}
  输出: 1 item 2 items 3 items
 </li>
 </ul>

 <ul v-for="item in man">
 <li>
  {{item}} {{item | pluralize 'st' 'rd'}}
  输出: 1 st 2 rd 3 rd
 </li>
 </ul>
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 data: {
  message: 1,
  lili: [1,2,3],
  man: {
  name1: 1,
  name2: 2,
  name3: 3
  }
 }
 })
</script>

debounce(事件延时)

1) 限制: 需在@里面使用
2) 参数:{Number} [wait] - 默认值: 300
3) 功能:包装处理器,让它延迟执行 x ms, 默认延迟 300ms。包装后的处理器在调用之后至少将延迟 x ms, 如果在延迟结束前再次调用,延迟时长重置为 x ms。

<div class="test">
 <button id="btn" @click="doSomeThing | debounce 10000">点击我</button>
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 methods: {
  doSomeThing: function () {
  // do something
  }
 }
 })
</script>

limitBy(排序)

1) 限制:需在v-for(即数组)里面使用

第一个参数:{Number} 取得数量

第二个参数:{Number} 偏移量

<div class="test">
 <ul v-for="item in lili | limitBy 10">
 <li>{{item}}</li>
 输出1 2 3 4 5 6 7 8 9 10
 </ul>
 <ul v-for="item in lili | limitBy 10 3">
 <li>{{item}}</li>
 输出 4 5 6 7 8 9 10 11 12 13
 </ul>
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 data: {
  lili: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
 }
 })
</script>

filterBy(过滤)

1) 限制:需在v-for(即数组)里面使用

第一个参数: {String | Function} 需要搜索的字符串

第二个参数: in (可选,指定搜寻位置)

第三个参数: {String} (可选,数组格式)

<div class="test">
 <ul v-for="item in lili | filterBy 'o' ">
 <li>{{item}}</li>
 输出oi oa lo ouo oala
 </ul>
 <ul v-for="item in man | filterBy 'l' in 'name' ">
 <li>{{item.name}}</li>
 输出lily lucy
 </ul>
 <ul v-for="item in man | filterBy 'l' in 'name' 'dada' ">
 <li>{{item.name+"+"+item.dada}}</li>
 输出lily+undefined lucy+undefined undefined+lsh
 </ul>
</div>
<script type="text/javascript">
var myVue = new Vue({
 el: ".test",
 data: {
 lili: ["oi", "oa", "ll", "lo" ,"ouo" ,"kk" ,"oala"],
 man: [ //此处注意man是数组,不是对象
 {name: "lily"},
 {name: "lucy"},
 {name: "oo"},
 {dada: "lsh"},
 {dada: "ofg"}
 ]
 }
})
</script>

orderBy(排序)

1) 限制:需在v-for(即数组)里面使用

第一个参数: {String | Array | Function} 需要搜索的字符串

第二个参数: {String} 可选参数 order 决定结果升序(order >= 0)或降序(order < 0),默认是升序

<div class="test">
 遍历数组
 <ul v-for="item in lili | orderBy 'o' 1">
 <li>{{item}}</li>
 输出kk ll oi
 </ul>
 <ul v-for="item in lili | orderBy 'o' -1">
 <li>{{item}}</li>
 输出oi ll kk
 </ul>
 遍历含对象的数组
 <ul v-for="item in man | orderBy 'name' 1">
 <li>{{item.name}}</li>
 输出Bruce Chuck Jackie
 </ul>
 <ul v-for="item in man | orderBy 'name' -1">
 <li>{{item.name}}</li>
 输出Jackie Chuck Bruce
 </ul>
 使用函数排序
 <ul v-for="item in man | orderBy ageByTen">
 <li>{{item.name}}</li>
 输出Bruce Chuck Jackie
 </ul>
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 data: {
  lili: ["oi", "kk", "ll"],
  man: [ //此处注意man是数组,不是对象
  {
  name: 'Jackie',
  age: 62
  },
  {
  name: 'Chuck',
  age: 76
  },
  {
  name: 'Bruce',
  age: 61
  }
 ]
 },
 methods: {
  ageByTen: function () {
  return 1;
  }
 }
 })
</script>

自定义过滤器

<div class="test">
 {{'2018-11-16 18:12:15'|formatDate}}
</div>
<script type="text/javascript">
 var myVue = new Vue({
 el: ".test",
 methods: {
 },
 filters:{
  formatDate (val) {
  return moment(val).format('YYYY-MM-DD');
  // 这里用到了moment.js
  }
 }
 })
</script>

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

Javascript 相关文章推荐
AJAX架构之Dojo篇
Apr 10 Javascript
jQuery Tools tooltip使用说明
Jul 14 Javascript
获得Javascript对象属性个数的示例代码
Nov 21 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
Dec 12 Javascript
JS数组去重与取重的示例代码
Jan 24 Javascript
JQuery中使文本框获得焦点的方法实例分析
Feb 28 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
jQuery控制控件文本的长度的操作方法
Dec 05 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
Sep 30 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
Mar 06 Javascript
vue+vuex+axios实现登录、注册页权限拦截
Mar 09 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
Vue入门之数量加减运算操作示例
Dec 11 #Javascript
简单的React SSR服务器渲染实现
Dec 11 #Javascript
Vuex 单状态库与多模块状态库详解
Dec 11 #Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 #Javascript
微信小程序实现两个页面传值的方法分析
Dec 11 #Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 #jQuery
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 #Javascript
You might like
php中iconv函数使用方法
2008/05/24 PHP
一个好用的PHP验证码类实例分享
2013/12/27 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
php 浮点数比较方法详解
2017/05/05 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
xml 封装与解析(javascript和C#中)
2009/07/26 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
利用Python如何批量更新服务器文件
2018/07/29 Python
python简单操作excle的方法
2018/09/12 Python
tensorflow 变长序列存储实例
2020/01/20 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
拾金不昧锦旗标语
2014/06/27 职场文书
ktv好的活动方案
2014/08/15 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
见习报告怎么写
2014/10/31 职场文书
社区元宵节活动总结
2015/02/06 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
python处理json数据文件
2022/04/11 Python