vue---數據列表過濾篩選

使用vue進行數據過濾篩選是比較經常使用的功能,常見的使用場景就是搜索框數據篩選過濾了。簡單示例:vue

<template>
  <div>
    <input type="text" v-model="search">
    <ul>
      <!-- 注意!注意!注意!這裏循環遍歷的是items,再也不是data裏的list數組 -->
      <li v-for="(item,index) in items">
        <span>{{item.name}}</span>
        <span>{{item.msg}}</span>
        <span>{{item.age}}</span>
        <span>{{item.title}}</span>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "DataForm", 
  data() {
    return {
      search:'',
      list:[
        {id:0,name:'AAA',msg:'aaa文本介紹1',title:'水電費',age:366},
        {id:1,name:'BBB',msg:'bbb文本介紹2',title:'趙子龍',age:235},
        {id:2,name:'CCC',msg:'ccc文本介紹3',title:'趙性',age:587},
        {id:3,name:'DDD',msg:'ddd文本介紹4',title:'展飛',age:654},
        {id:4,name:'EEE',msg:'eee文本介紹5',title:'收費',age:987},
        {id:5,name:'FFF',msg:'Aa文本介紹6',title:'收費',age:6985},
      ]
    };
  },
  computed:{
    // 篩選指定字段
    items:function(){
      let _search = this.search;
      let reg = new RegExp(_search, 'ig');// 不區分大小寫
      if(_search){
        return this.list.filter(function(item){
          if((item.id.toString().indexOf(_search) != -1) || item.msg.match(reg) || (item.age.toString().indexOf(_search) != -1)){
            return item;
          }
        });
      }
      return this.list;
    },
    // 篩選全部的字段
    itemss: function() {
      var _search = this.search;
      console.log(_search);
      if(_search){
        // 不區分大小寫處理
        var reg = new RegExp(_search, 'ig')
        // es6 filter過濾匹配,有則返回當前,無則返回全部
        return this.list.filter(function(e) {
          // 匹配全部字段
          return Object.keys(e).some(function(key) {
            return e[key].match(reg);
          })
          // 匹配某個字段
          // return e.name.match(reg);
        })
      };
      return this.list;
    }
  }
};
</script>
相關文章
相關標籤/搜索