vue 中filter的多种用法


Posted in Javascript onApril 26, 2018

1、自定义的过滤器,当然这包括注册在全局和注册在实例化的内部

(1)注册在全局的fliter

(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>

filter是默认会传入当前的item,而且filter的第一个参数默认就是当前的item。

(2)注册在实例化内部

上面的例子直接注册在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>

2、使用js中的迭代函数filter

vue 中filter的多种用法 

(1)实例一原文

var app5 = new Vue({
  el: '#app5',
  data: {
    shoppingList: [
      "Milk", "Donuts", "Cookies", "Chocolate", "Peanut Butter", "Pepto Bismol", "Pepto Bismol (Chocolate flavor)", "Pepto Bismol (Cookie flavor)"
    ],
    key: ""
  },
  computed: {
    filterShoppingList: function () {
      // `this` points to the vm instance
      var key = this.key;
      var shoppingList = this.shoppingList;
      //在使用filter时需要注意的是,前面调用的是需要使用filter的数组,而给filter函数传入的是数组中的每个item,也就是说filter里面的函数,是每个item要去做的,并将每个结果返回。
      return shoppingList.filter(function (item) {
        return item.toLowerCase().indexOf(key.toLowerCase()) != -1
      });;
    }
  }
})

 <ul>
  Filter Key<input type="text" v-model="key">  
    <li v-for="item in filterShoppingList">
      {{ item }}
    </li>
  </ul>

最终效果实现了根据关键字来过滤列表的功能。

vue 中filter的多种用法 

 其他的一些Js 迭代方法——filter()、map()、some()、every()、forEach()、lastIndexOf()、indexOf()

总结

以上所述是小编给大家介绍的vue 中filter的多种用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
获取内联和链接中的样式(js代码)
Apr 11 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
Nov 05 Javascript
在JavaScript中操作时间之getMonth()方法的使用
Jun 10 Javascript
ECMAScript6函数默认参数
Jun 12 Javascript
jQuery AJAX timeout 超时问题详解
Jun 21 Javascript
DropDownList实现可输入可选择(两种版本可选)
Dec 07 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
解决vue 表格table列求和的问题
Nov 06 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 Javascript
vue自定义filters过滤器
Apr 26 #Javascript
JavaScript实现微信红包算法及问题解决方法
Apr 26 #Javascript
react 创建单例组件的方法
Apr 26 #Javascript
node打造微信个人号机器人的方法示例
Apr 26 #Javascript
Vue 使用中的小技巧
Apr 26 #Javascript
基于Vue实现拖拽功能
Jul 29 #Javascript
vuex操作state对象的实例代码
Apr 25 #Javascript
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
Python探索之创建二叉树
2017/10/25 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python语言快速上手学习方法
2018/12/14 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
中科前程Java笔试题
2016/11/20 面试题
《木笛》教学反思
2014/03/01 职场文书
车队司机自我鉴定
2014/03/02 职场文书
微笑服务标语
2014/06/24 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
nginx访问报403错误的几种情况详解
2022/07/23 Servers