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+iview实现文件上传
Nov 17 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
Vue基本指令实例图文讲解
Feb 25 Vue.js
vue+django实现下载文件的示例
Mar 24 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
vue实现同时设置多个倒计时
May 20 Vue.js
详解vue身份认证管理和租户管理
May 25 Vue.js
Vue3.0 手写放大镜效果
Jul 25 Vue.js
Vue自定义铃声提示音组件的实现
Jan 22 Vue.js
Vue2项目中对百度地图的封装使用详解
Jun 16 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP 函数执行效率的小比较
2010/10/17 PHP
YII路径的用法总结
2014/07/09 PHP
php+ajax实现文章自动保存的方法
2014/12/30 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
最短的IE判断代码
2011/03/13 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
详解React项目中碰到的IE问题
2019/03/14 Javascript
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
python求解水仙花数的方法
2015/05/11 Python
Python中zfill()方法的使用教程
2015/05/20 Python
在Python中marshal对象序列化的相关知识
2015/07/01 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
Python+Django搭建自己的blog网站
2018/03/13 Python
用pandas按列合并两个文件的实例
2018/04/12 Python
django+xadmin+djcelery实现后台管理定时任务
2018/08/14 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
正宗的澳大利亚Ugg靴子零售商:UGG Express
2020/04/19 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
日元符号 ¥
2022/02/17 杂记