详解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 相关文章推荐
html数组字符串拼接的最快方法
Sep 16 Javascript
基于jQuery的自动完成插件
Feb 03 Javascript
浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)
Jul 09 Javascript
JS 获取select(多选下拉)中所选值的示例代码
Aug 02 Javascript
跟我学习javascript的this关键字
May 28 Javascript
JS常用知识点整理
Jan 21 Javascript
javascript遍历json对象的key和任意js对象属性实例
Mar 09 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
May 28 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
Aug 12 Javascript
Layer弹出层动态获取数据的方法
Aug 20 Javascript
vue 子组件和父组件传值的示例
Sep 11 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下10件你也许并不了解的事情
2008/09/11 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
div移动 输入框不能输入的问题
2009/11/19 Javascript
jquery 图片截取工具jquery.imagecropper.js
2010/04/09 Javascript
JQuery中根据属性或属性值获得元素(6种情况获取方法)
2013/01/17 Javascript
基于javascript 闭包基础分享
2013/07/10 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
2016/07/14 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
vue 动态表单开发方法案例详解
2019/12/02 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
基于python log取对数详解
2018/06/08 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
某科技软件测试面试题
2013/05/19 面试题
酒店餐厅2014重阳节活动策划方案
2014/09/16 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
行政助理岗位职责
2015/02/10 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
干部考核工作总结2015
2015/07/24 职场文书