详解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 回车事件enter使用示例
Feb 18 Javascript
javascript数组遍历for与for in区别详解
Dec 04 Javascript
在Ubuntu系统上安装Node.JS的教程
Oct 15 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
深入理解JavaScript中的尾调用(Tail Call)
Feb 07 Javascript
jQuery中 bind的用法简单介绍
Feb 13 Javascript
Chrome调试折腾记之JS断点调试技巧
Sep 11 Javascript
nginx+vue.js实现前后端分离的示例代码
Feb 12 Javascript
浅谈VUE监听窗口变化事件的问题
Feb 24 Javascript
基于Vue实现图片在指定区域内移动的思路详解
Nov 11 Javascript
Vue项目接入Paypal实现示例详解
Jun 04 Javascript
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
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 Cookie的使用教程详解
2013/06/03 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
Javascript之文件操作
2007/03/07 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
jquery显示隐藏input对象
2014/07/21 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
js使用Promise实现简单的Ajax缓存
2018/11/14 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
Python3基础之基本数据类型概述
2014/08/13 Python
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
python如何使用unittest测试接口
2018/04/04 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
如何用Python徒手写线性回归
2021/01/25 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
电气技术员岗位职责
2013/11/19 职场文书
书香校园活动方案
2014/02/28 职场文书
企业安全生产责任书
2014/04/14 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
办公室主任岗位职责
2015/01/31 职场文书
质量保证书怎么写
2015/02/27 职场文书
小学六年级毕业感言
2015/07/30 职场文书