详解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 原型与继承说明
Jun 09 Javascript
jQuery队列操作方法实例
Jun 11 Javascript
jQuery+AJAX实现无刷新下拉加载更多
Jul 03 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
jQuery CSS3自定义美化Checkbox实现代码
May 12 Javascript
JS加载iFrame出现空白问题的解决办法
May 13 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 Javascript
angularjs使用div模拟textarea文本框的方法
Oct 02 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
15 分钟掌握vue-next响应式原理
Oct 13 Javascript
前端学习——JavaScript原生实现购物车案例
Mar 31 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打造属于自己的MVC框架
2012/03/07 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
JS实现复制功能
2017/03/01 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
webpack的CSS加载器的使用
2018/09/11 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
解决Vue开发中对话框被遮罩层挡住的问题
2018/11/26 Javascript
微信小程序如何获取用户头像和昵称
2019/09/23 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
2019/10/29 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python使用itchat实现手机控制电脑
2018/02/22 Python
python装饰器深入学习
2018/04/06 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
pycharm实现print输出保存到txt文件
2020/06/01 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
Mytheresa中国官网:德国时尚奢侈品商城
2017/08/04 全球购物
校园十大歌手策划书
2014/02/01 职场文书
阿德的梦教学反思
2014/02/06 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
家长反馈意见及建议
2015/06/03 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript