详解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 相关文章推荐
js 页面刷新location.reload和location.replace的区别小结
Dec 24 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
Nov 08 Javascript
原生JS实现响应式瀑布流布局
Apr 02 Javascript
js+css实现上下翻页相册代码分享
Aug 18 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
关于原生js中bind函数的简单实现
Aug 10 Javascript
jQuery插件zTree实现获取一级节点数据的方法
Mar 08 Javascript
JS实现图片点击后出现模态框效果
May 03 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
vue.js系列中的vue-fontawesome使用
Feb 10 Javascript
JavaScript实现简单动态进度条效果
Apr 06 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
Jun 17 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
jQueryUI DatePicker 添加时分秒
2016/06/04 Javascript
JavaScript中双向数据绑定详解
2017/05/03 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python返回真假值(True or False)小技巧
2015/04/10 Python
说一说Python logging
2016/04/15 Python
Python队列的定义与使用方法示例
2017/06/24 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
python元组和字典的内建函数实例详解
2019/10/22 Python
在django中使用apscheduler 执行计划任务的实现方法
2020/02/11 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Python类的继承super相关原理解析
2020/10/22 Python
python中用ggplot绘制画图实例讲解
2021/01/26 Python
什么是Remote Module
2016/06/10 面试题
新闻记者实习自我鉴定
2013/09/19 职场文书
移动通信行业实习自我鉴定
2013/09/28 职场文书
公司承诺书范文
2014/05/19 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
迟到检讨书
2015/01/26 职场文书
办公室行政主管岗位职责
2015/04/09 职场文书
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL