详解Vue自定义过滤器的实现


Posted in Javascript onJanuary 10, 2017

一 自定义过滤器(注册在Vue全局)

注意事项:

(1)全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面

(2) 过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算

(3)可以设置两个过滤器参数,前提是这两个过滤器处理的不冲突

(4)用户从input输入的数据在回传到model之前也可以先处理

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>vue自定义过滤器</title>
    <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  </head>
  <body>
    <div class="test">
      <p>{{message | sum}}</p>
      <p>{{message | cal 10 20}}</p> <!--过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算。-->
      <p>{{message | sum | currency }}</p> <!--添加两个过滤器,注意不要冲突-->
      
      <input type="text" v-model="message | change"> <!--用户从input输入的数据在回传到model之前也可以先处理-->
      
    </div>
    <script type="text/javascript">
    
//    -----------------------------------------华丽分割线(从model->view)---------------------------------------
      Vue.filter("sum", function(value) {  //全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面
        return value + 4;
      });
      
      Vue.filter('cal', function (value, begin, xing) {  //全局方法 Vue.filter() 注册一个自定义过滤器,必须放在Vue实例化前面
        return value + begin + xing;
      });

//    -----------------------------------------华丽分割线(从view->model)---------------------------------------
      Vue.filter("change", {
        read: function (value) { // model -> view 在更新 `<input>` 元素之前格式化值
          return value;
        },
        write: function (newVal,oldVal) { // view -> model 在写回数据之前格式化值
          console.log("newVal:"+newVal); 
          console.log("oldVal:"+oldVal);
          return newVal;
        }
      });

      var myVue = new Vue({
        el: ".test",
        data: {
          message:12
        }
      });
      
    </script>
  </body>
</html>

二 自定义过滤器(注册在实例化内部)

上面的例子直接注册在Vue全局上面,其他不用这个过滤器的实例也会被迫接受,其实过滤器可以注册在实例内部,仅在使用它的实例里面注册

上面的程序改写为:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>vue自定义过滤器</title>
    <script src="../js/vue.js" type="text/javascript" charset="utf-8"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  </head>
  <body>
    <div class="test">
      <p>{{message | sum}}</p>
      <p>{{message | cal 10 20}}</p> <!--过滤器函数始终以表达式的值作为第一个参数。带引号的参数视为字符串,而不带引号的参数按表达式计算。-->
      <p>{{message | sum | currency }}</p> <!--添加两个过滤器,注意不要冲突-->
      
      <input type="text" v-model="message | change"> <!--用户从input输入的数据在回传到model之前也可以先处理-->
      
    </div>
    <script type="text/javascript">
      Vue.filter("change", {
        read: function (value) { // model -> view 在更新 `<input>` 元素之前格式化值
          return value;
        },
        write: function (newVal,oldVal) { // view -> model 在写回数据之前格式化值
          console.log("newVal:"+newVal); 
          console.log("oldVal:"+oldVal);
          return newVal;
        }
      });

      var myVue = new Vue({
        el: ".test",
        data: {
          message:12
        },
        filters: {
          sum: function (value) {
            return value + 4;
          },
          cal: function (value, begin, xing) {
            return value + begin + xing;
          }
        }
      });
      
    </script>
  </body>
</html>

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

Javascript 相关文章推荐
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
jquery模拟按下回车实现代码
Sep 20 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
为指定的元素添加遮罩层的示例代码
Jan 15 Javascript
jquery的live使用注意事项
Feb 18 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
js实现搜索框关键字智能匹配代码
Mar 26 Javascript
JavaScript数据结构与算法之链表
Jan 29 Javascript
简单实现js选项卡切换效果
Feb 03 Javascript
使用JS正则表达式 替换括号,尖括号等
Nov 29 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 Javascript
JS实现的表头列头固定页面功能示例
Jan 10 #Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 #Javascript
微信小程序 地图map详解及简单实例
Jan 10 #Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 #Javascript
jQuery UI仿淘宝搜索下拉列表功能
Jan 10 #Javascript
jquery 正整数数字校验正则表达式
Jan 10 #Javascript
Angular的$http的ajax的请求操作(推荐)
Jan 10 #Javascript
You might like
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
给ECShop添加最新评论
2015/01/07 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
轻松实现php文件上传功能
2017/02/17 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
js中document.write的那点事
2014/12/12 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
jQuery表单验证之密码确认
2017/05/22 jQuery
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
浅谈python字符串方法的简单使用
2016/07/18 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
在python中logger setlevel没有生效的解决
2020/02/21 Python
Keras loss函数剖析
2020/07/06 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
五种Python转义表示法
2020/11/27 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
小车司机岗位职责
2013/11/25 职场文书
环保标语口号
2014/06/13 职场文书
我爱家乡演讲稿
2014/09/12 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
SQLServer之常用函数总结详解
2021/08/30 SQL Server
彩虹社八名人气艺人全新周边限时推出,性转女装男装一次拥有!
2022/04/01 日漫