详解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去除字符串的空格增强版(可以去除中间的空格)
Aug 26 Javascript
基于jQuery的倒计时实现代码
May 30 Javascript
js判断变量是否未定义的代码
Mar 28 Javascript
jQuery弹出(alert)select选择的值
Apr 21 Javascript
jquery的ajax简单结构示例代码
Feb 17 Javascript
Angularjs中controller的三种写法分享
Sep 21 Javascript
jquery表单验证插件validation使用方法详解
Jan 20 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
详解创建自定义的Angular Schematics
Jun 06 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
Javascript 面向对象之重载
2010/05/04 Javascript
jQuery示例收集
2010/11/05 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
JS button按钮实现submit按钮提交效果
2016/11/01 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
django文档学习之applications使用详解
2018/01/29 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
使用python+whoosh实现全文检索
2019/12/09 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
中国最大的团购网站:聚划算
2016/09/21 全球购物
新闻报道策划方案
2014/06/11 职场文书
财政局个人年终总结
2015/03/03 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL