Vue的全局过滤器和私有过滤器的实现


Posted in Javascript onApril 20, 2020

Vue允许自定义过滤器 可被用作一些常见的文本格式化

过滤器可以用在两个地方:mustache插值表达式 和 v-bind表达式

过滤器应被添加在JavaScript表达式的尾部 由“管道”符指示(管道符就是一个竖杠:|)

一、全局过滤器

全局过滤器调用时的基本格式:

通过管道符[|]来进行过滤 例如{{name | nameOpe}}
定义过滤器的语法:Vue.filter("过滤器名称",处理函数)

处理函数的第一个参数已被固定了 是data 即管道符前面传递的数据
若要添加其它入参 只能添加在data的后面了

Vue.filter("",function(data)
{
  return data+"123";
})

(上述例子中 该过滤器的功能就是给过滤器前面的数据加上"123"字符串)

一个值得注意的地方是:过滤器并没有修改原数据 只是在输出之前进行了一层处理

<div id="app">
	<p>{{msg | msgFormat}}</p>
</div>
<script>
  // Vue全局过滤器
  Vue.filter("msgFormat",function(data){
    // replace()方法的第一个参数支持正则表达式
    return data.replace(/陈涛/g,"李强");
  })

  var vm=new Vue({
    el:'#app',
    data:{
      msg:"我的名字叫陈涛,一天早上,同学碰见我,向我打招呼:'陈涛,你好!'"
    }
  });
</script>

过滤器也可以传入参数 且还能传多个参数

<div id="app">
	<!-- 过滤器也可以传参 还能传多个参数 -->
	<p>{{msg | msgFormat("豪哥","111")}}</p>
</div>
<script>
  // Vue全局过滤器
  Vue.filter("msgFormat",function(data,arg1,arg2){
    // replace()方法的第一个参数支持正则表达式
    return data.replace(/陈涛/g,arg1+arg2);
  })

  var vm=new Vue({
    el:'#app',
    data:{
      msg:"我的名字叫陈涛,一天早上,同学碰见我,向我打招呼:'陈涛,你好!'"
    },
    methods:{}
  });
</script>

还能多次调用过滤器 被调用的过滤器会按顺序执行

<div id="app">
	<!-- 调用多个过滤器 -->
	<p>{{msg | msgFormat("豪哥","111") | test}}</p>
</div>
<script>
  // Vue全局过滤器
  Vue.filter("msgFormat",function(data,arg1,arg2){
    // replace()方法的第一个参数支持正则表达式
    return data.replace(/陈涛/g,arg1+arg2);
  })

  // 可多次调用过滤器
  Vue.filter("test",function(msg)
  {
    return "<<<"+msg+">>>"
  })

  var vm=new Vue({
    el:'#app',
    data:{
      msg:"我的名字叫陈涛,一天早上,同学碰见我,向我打招呼:'陈涛,你好!'"
    },
    methods:{}
  });
</script>

这两个过滤器组合起来 顺序执行 输出结果就是:

Vue的全局过滤器和私有过滤器的实现

二、私有过滤器

全局过滤器是能够被所有的Vue实例共享 因而得名
那么 同理 私有过滤器就是只能被定义的那个Vue实例使用

过滤器的调用顺序 采用的是就近原则
即 若有私有过滤器 则会优先使用私有过滤器 若没有私有过滤器 则会使用全局过滤器

每个过滤器有其自己的【名称】和【处理函数】

定义私有过滤器的时候 也是在Vue实例里定义的
有个filters属性专门用来定义私有过滤器
格式就是:过滤器名:方法

以一个日期格式转换过滤器作为例子:

<div id="app2">
	<h3>{{date | dateFormat}}</h3>
</div>
// 自定义私有过滤器
var vm2=new Vue({
  el:'#app2',
  data:{
    date:new Date()
  },
  methods:{},
  // 定义私有过滤器
  filters:{
    dateFormat:function(dateStr,pattern="")
    {
      var dt=new Date(dateStr);

      var year=dt.getFullYear();
      var month=dt.getMonth()+1;
      var day=dt.getDate();

      if (pattern.toLowerCase()==="yyyy-mm-dd")
      {
        return `${year}-${month}-${day}`;
      }
      else
      {
        var hour=dt.getHours();
        var minute=dt.getMinutes();
        var second=dt.getSeconds();

        return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
      }
    }
  }
})

到此这篇关于Vue的全局过滤器和私有过滤器的实现的文章就介绍到这了,更多相关Vue的全局过滤器和私有过滤器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Prototype源码浅析 String部分(三)之HTML字符串处理
Jan 15 Javascript
javascript分页代码(当前页码居中)
Sep 20 Javascript
JavaScript避免代码的重复执行经验技巧分享
Apr 17 Javascript
JavaScript跨域方法汇总
Oct 16 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
微信小程序返回多级页面的实现方法
Oct 27 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
JavaScript Reflect Metadata实现详解
Dec 12 Javascript
如何在vue-cli中使用css-loader实现css module
Jan 07 Vue.js
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 #Javascript
vue实现购物车功能(商品分类)
Apr 20 #Javascript
vue实现淘宝购物车功能
Apr 20 #Javascript
javascript利用键盘控制小方块的移动
Apr 20 #Javascript
vue实现购物车的监听
Apr 20 #Javascript
详解微信小程序工程化探索之webpack实战
Apr 20 #Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 #Javascript
You might like
ob_start(),ob_start('ob_gzhandler')使用
2006/12/25 PHP
PHP 配置文件中open_basedir选项作用
2009/07/19 PHP
PHP技术开发技巧分享
2010/03/23 PHP
php笔记之:AOP的应用
2013/04/24 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
Three.js快速入门教程
2016/09/09 Javascript
jstree的简单实例
2016/12/01 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python NumPy库安装使用笔记
2015/05/18 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
什么是方法的重载
2013/06/24 面试题
小学二年级学生评语
2014/04/21 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
年度考核登记表个人总结
2015/03/06 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby