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 相关文章推荐
jQuery模拟超链接点击效果代码
Apr 21 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
深入学习JavaScript中的Rest参数和参数默认值
Jul 28 Javascript
JS插件overlib用法实例详解
Dec 26 Javascript
详解jQuery Mobile自定义标签
Jan 06 Javascript
浅谈angularjs $http提交数据探索
Jan 20 Javascript
详解微信小程序审核不通过的解决方法
Jan 17 Javascript
详解Immutable及 React 中实践
Mar 01 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
Node.JS在命令行中检查Chrome浏览器是否安装并打开指定网址
May 21 Javascript
Openlayers+EasyUI Tree动态实现图层控制
Sep 28 Javascript
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
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获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
PHP简单获取多个checkbox值的方法
2016/06/13 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
Javascript 实现简单计算器实例代码
2016/10/23 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
JS实现简单日历特效
2020/01/03 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
跟老齐学Python之编写类之二方法
2014/10/11 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
python多线程分块读取文件
2019/08/29 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Python如何实现强制数据类型转换
2019/11/22 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
django 模型字段设置默认值代码
2020/07/15 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
简述数据库的设计过程
2015/06/22 面试题
会计核算科岗位职责
2014/03/19 职场文书
法人代表授权委托书
2014/04/08 职场文书
基层党员对照检查材料
2014/08/25 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript