Vue过滤器(filter)实现及应用场景详解


Posted in Vue.js onJune 15, 2021

1. 简单介绍

Vue.js 允许你自定义过滤器(filter),可被用于一些常见的文本格式化。

过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。

过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示:

<!-- 在双花括号中 -->
{{ message | filter }}

<!-- 在 `v-bind` 中 -->
<div v-bind:msg="message | filter"></div>

过滤器函数总接收表达式的值作为第一个参数。

在上述例子中,filter 过滤器函数将会收到 message 的值作为第一个参数。

1.1 过滤器可以串联

{{ message | filterA | filterB }}

在这个例子中,filterA 被定义为接收单个参数的过滤器函数,表达式 message 的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到 filterB 中。

1.2 过滤器是 JavaScript 函数可以接收参数

{{ message | filterA('arg1', arg2) }}

filterA 被定义为接收三个参数的过滤器函数。其中 message 的值作为第一个参数,普通字符串 'arg1' 作为第二个参数,表达式 arg2 的值作为第三个参数。

2. vue-cli中定义全局过滤器

语法:Vue.filter( filterName,( ) => { return // 数据处理结果 } )

eg:

<div id="app">
  <h3>{{userName | addName}}</h3>
</div>
<script>
// 参数一:是过滤器的名字,也就是管道符后边的处理函数;
// 参数二:处理函数,处理函数的参数同上	
Vue.filter("addName",(value)=>{											            
    return "my name is" + value
})
let vm = new Vue({
    el:"#app",
  	data:{
     userName:"小明" 
    }
})
</script>

2.1 实际开发使用

全局过滤器经常会被在数据修饰上,通常我们把处理函数给抽离出去,统一放在一个.js文件中。

// filter.js 文件

let filterPrice = (value) => {
	return '已收款' + value + '元'
}
let filterDate = (value) => {
    return value + '天'
}

export default {filterPrice,filterDate}

在main.js中 导入 上边 filter.js文件 ,也可以在任何组件中导入 filter.js这个文件,但对于全局过滤器来说,最好是在main.js中定义,导入的是一个对象,所以使用Object.keys()方法,得到一个由key组成的数组,遍历数据,让key作为全局过滤器的名字,后边的是key对应的处理函数,这样在任何一个组件中都可以使用全局过滤器了:

//main.js
 
//下边是2种导入方式,推荐第一种
import * as filters from './utils/filter/filter'
// import {filterPrice,filterDate} from './utils/filter/filter'
 
console.log(filters)
 
Object.keys(filters.default).forEach((item)=>{
  Vue.filter(item,filters.default[item])
})
 
new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')

Vue过滤器(filter)实现及应用场景详解

3. 在组件中使用 全局过滤器:

// test.vue

<template>
  <div>
    <input type="text" v-model="filterCount" >
    <div>{{filterCount | filterPrice}}</div>
    <div>{{filterCount | filterDate}}</div>
  </div>  
</template>

<script>
export default {
  data(){
    return {
      filterCount:1500
    }
  },
}
</script>

Vue过滤器(filter)实现及应用场景详解

3. vue-cli中定义局部过滤器

// test.vue

<template>
  <div>
    <input type="text" v-model="filterCount" >
    <div>{{filterCount | filterPrice}}</div>
    <div>{{filterCount | filterDate}}</div>
  </div>  
</template>

<script>
export default {
  data(){
    return {
      filterCount:1500
    }
  },
}
</script>

Vue过滤器(filter)实现及应用场景详解

4. 常见使用场景

4.1 格式日期(时间)

场景一:后端传的时间:2019-11-19T04:32:46Z

安装moment.js

// main.js

import moment from 'moment'
// 定义全局过滤器--时间格式化
Vue.filter('format',function(val,arg){
  if(!val) return;
  val = val.toString()
  return moment(val).format(arg)
})
// test.vue

<template>
   <div class="filter">{{time | format('YYYY-MM-DD HH:MM:SS')}}</div>  
</template>

<script>
export default {
  data(){
    return {
      time:'2019-11-19T04:32:46Z'
    }
  }
}
</script>

Vue过滤器(filter)实现及应用场景详解

总结

到此这篇关于Vue过滤器(filter)实现及应用场景的文章就介绍到这了,更多相关Vue过滤器(filter)实现应用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
vue 根据选择的月份动态展示日期对应的星期几
Feb 06 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue中h5端打开app(判断是安卓还是苹果)
Feb 26 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
Vue和Flask通信的实现
May 19 Vue.js
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
vue组件vue-esign实现电子签名
Apr 21 Vue.js
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
解决Vue+SpringBoot+Shiro跨域问题
Jun 09 #Vue.js
Vue中插槽slot的使用方法与应用场景详析
vue+elementui 实现新增和修改共用一个弹框的完整代码
解决vue $http的get和post请求跨域问题
vue Element-ui表格实现树形结构表格
Jun 07 #Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 #Vue.js
You might like
php从字符串创建函数的方法
2015/03/16 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
Laravel框架在本地虚拟机快速安装的方法详解
2018/06/11 PHP
PHP按符号截取字符串的指定部分的实现方法
2018/09/10 PHP
js change,propertychange,input事件小议
2011/12/20 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
AngularJS上传文件的示例代码
2018/11/10 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
vue动态配置模板 'component is'代码
2019/07/04 Javascript
用Python给文本创立向量空间模型的教程
2015/04/23 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
Django model反向关联名称的方法
2018/12/15 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
如何使用python自带IDLE的几种方法
2020/10/10 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
苹果Mac升级:MacSales.com
2017/11/20 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
新加坡交友网站:be2新加坡
2019/04/10 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
监考失职检讨书
2015/01/26 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
mysql优化
2021/04/06 MySQL
Flink 侧流输出源码示例解析
2022/09/23 Servers