详解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 window.setTimeout() 的详细用法
Nov 04 Javascript
js parentElement和offsetParent之间的区别
Mar 23 Javascript
javascript XMLHttpRequest对象全面剖析
Apr 24 Javascript
20款效果非常棒的 jQuery 插件小结分享
Nov 18 Javascript
js前台分页显示后端JAVA数据响应
Mar 18 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
jQuery禁用快捷键例如禁用F5刷新 禁用右键菜单等的简单实现
Aug 31 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
Nov 09 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 Javascript
js实现扫雷小程序的示例代码
Sep 27 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
详解Angular cli配置过程记录
Nov 07 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笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
destoon常用的安全设置概述
2014/06/21 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Windows下安装python2.7及科学计算套装
2015/03/05 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
pandas值替换方法
2018/07/10 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
业绩倒数第一的检讨书
2014/09/24 职场文书
暑假安全保证书
2015/02/28 职场文书
治庸问责工作总结
2015/08/11 职场文书