详解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 相关文章推荐
基于jquery的cookie的用法
Jan 10 Javascript
TextArea设置MaxLength属性最大输入值的js代码
Dec 21 Javascript
js Dialog 去掉右上角的X关闭功能
Apr 23 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
Apr 12 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
Jul 27 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
JS双击变input框批量修改内容
Dec 12 Javascript
JS仿JQuery选择器功能
Mar 08 Javascript
详解小程序input框失焦事件在提交事件前的处理
May 05 Javascript
解决vue的router组件component在import时不能使用变量问题
Jul 26 Javascript
js获取图片的base64编码并压缩
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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
PHP自定义函数收代码
2010/08/01 PHP
JS动态日期时间的获取方法
2015/09/28 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
jQuery+CSS3实现点赞功能
2017/03/13 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
微信小程序数据统计和错误统计的实现方法
2019/06/26 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
vue总线机制(bus)知识点详解
2020/05/10 Javascript
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
深入理解Django中内置的用户认证
2017/10/06 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
2019/06/18 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
Python中的Cookie模块如何使用
2020/06/04 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
CSMA/CD介质访问控制协议
2015/11/17 面试题
Linux操作面试题
2012/05/16 面试题
早餐连锁店计划书
2014/01/08 职场文书
党支部换届选举方案
2014/05/08 职场文书
化工实习心得体会
2014/09/09 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android