详解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 相关文章推荐
从JavaScript 到 JQuery (1)学习小结
Feb 12 Javascript
JavaScript 替换Html标签实现代码
Oct 14 Javascript
JavaScript实现QueryString获取GET参数的方法
Jul 02 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
jquery如何判断某元素是否具备指定的样式
Nov 05 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
Apr 12 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
学习JavaScript设计模式之观察者模式
Apr 22 Javascript
JavaScript中关于iframe滚动条的去除和保留
Nov 17 Javascript
Vue.js在数组中插入重复数据的实现代码
Nov 17 Javascript
解决vue处理axios post请求传参的问题
Mar 05 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
加随机数引入脚本不让浏览器读取缓存
2014/09/04 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
vue实现axios图片上传功能
2019/08/20 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
python中join()方法介绍
2018/10/11 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
广州御银科技股份有限公司试卷(C++)
2016/11/04 面试题
毕业证委托书范文
2014/09/26 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
2014年副班长工作总结
2014/12/10 职场文书
生日答谢词
2015/01/05 职场文书
国家助学金感谢信
2015/01/21 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
CSS完成视差滚动效果
2021/04/27 HTML / CSS