vue实现搜索过滤效果


Posted in Javascript onMay 28, 2019

本文实例为大家分享了vue实现搜索过滤效果的具体代码,供大家参考,具体内容如下

html:

<table id="tfhover_1" class="tftable_1" border="1">
  <tr>
    <th>名称</th>
    <th>链接状态</th>
    <th>IP</th>
    <th>特例类型</th>
    <th>所属城市</th>
    <th>所属机房</th>
  </tr>
  <tr v-cloak v-for="(item, index) of slist">
    <td>{{item.name}}</td>
    <td>{{item.username}}</td>
    <td>{{item.email}}</td>
    <td>{{item.sex}}</td>
    <td>{{item.province}}</td>
    <td>{{item.hobb}}</td>
    <!--<td><a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="showOverlay(index)">修改</a> | <a href="javascript:;" rel="external nofollow" rel="external nofollow" @click="del(index)">删除</a></td>-->
  </tr>
</table>

css:

[v-cloak] {
  display: none
}
table {
  border: 1px solid #ccc;
  padding: 0;
  border-collapse: collapse;
  table-layout: fixed;
  /*margin-top: 10px;*/
  width: 100%;
  margin-top: 45px;
}
table td,
table th {
  height: 30px;
  border: 1px solid #ccc;
  background: #fff;
  font-size: 2vh;
  padding: 12px 3px 6px 8px;
  color: #666666;
  font-weight: 300;
}
table th:first-child {
  width: 4rem;
}
.container,
.st {
  /*width: 1000px;*/
  margin: 10px auto 0;
  font-size: 13px;
  font-family: '微软雅黑'
}
.container .search {
  font-size: 15px;
  padding: 4px;
}
.container .add {
  padding: 5px 15px;
}
.overlay {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 6;
  background: rgba(0, 0, 0, 0.7);
}
.overlay td:first-child {
  width: 8rem;
}
.overlay .con {
  position: absolute;
  /*width: 420px;*/
  min-height: 300px;
  background: #fff;
  left: 50%;
  top: 50%;
  -webkit-transform: translate3d(-50%, -50%, 0);
  transform: translate3d(-50%, -50%, 0);
  /*margin-top: -150px;*/
  padding: 20px;
}
 
.span_1{
  font-size: 18px;
  color: #666666;
}

js:

Vue.component('model', {
 
  template: '',
  props: ['list', 'isactive'],
  computed: {
    modifylist() {
      return this.list;
    }
  },
  methods: {
    changeActive() {
      this.$emit('change');
    },
    modify() {
      this.$emit('modify', this.modifylist);
    },
    add(){
 
    }
  }
});
 
 
var app = new Vue({
  el: '#app',
  data: {
    isActive: false,
    selected: -1,
    selectedlist: {},
    slist: [],
    searchlist: [],
    list: [
      {
        name:'Fe1',
        username: '开',
        email: '221.122.62.221',
        sex: '特例1',
        province: '北京',
        hobb:'电子机房'
      },
      {
        name:'Fe2',
        username: '关',
        email: '192.168.12.222',
        sex: '特例2',
        province: '上海',
        hobb: '服务机房'
      },
      {
        name:'Fe3',
        username: '开',
        email: '127.255.255.255',
        sex: '特例3',
        province: '重庆',
        hobb: '遥控机房'
      },
      {
        name:'Fe4',
        username: '关',
        email: '223.255.255.255',
        sex: '特例4',
        province: '北京市',
        hobb:'内网机房'
      }
    ]
  },
  created() {
    this.setSlist(this.list);
  },
  methods: {
    // 修改数据
    showOverlay(index) {
      this.selected = index;
      this.selectedlist = this.list[index];
      this.changeOverlay();
    },
    // 点击保存按钮
    modify(arr) {
      if (this.selected > -1) {
        Vue.set(this.list, this.selected, arr);
        this.selected = -1;
      } else {
        this.list.push(arr);
      }
      this.setSlist(this.list);
 
      this.changeOverlay();
    },
 
    del(index) {
      this.list.splice(index, 1);
      this.setSlist(this.list);
    },
    changeOverlay() {
      this.isActive = !this.isActive;
    },
    // 获取需要渲染到页面中的数据
    setSlist(arr) {
      this.slist = JSON.parse(JSON.stringify(arr));
    },
    // 搜索
    search() {
      var v = $('.search').val(),
        self = this;
      self.searchlist = [];
      if (v) {
        var ss = [];
        // 过滤需要的数据
        this.list.forEach(function (item) {
          if (item.province.indexOf(v) > -1) {
            if (self.searchlist.indexOf(item.province) == -1) {
              self.searchlist.push(item.province);
            }
            ss.push(item);
          } else if (item.hobb.indexOf(v) > -1) {
            if (self.searchlist.indexOf(item.hobb) == -1) {
              self.searchlist.push(item.hobb);
            }
            ss.push(item);
          }
        });
        this.setSlist(ss); // 将过滤后的数据给了slist
      } else {
        // 没有搜索内容,则展示全部数据
        this.setSlist(this.list);
      }
    }
  },
  watch: {
  }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
?牟┛途W扣了一??效果出?? target=
May 27 Javascript
mapper--图片热点区域高亮组件官方站点
Dec 22 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
Mar 15 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
JavaScript数组去重的3种方法和代码实例
Jul 01 Javascript
layui实现文件或图片上传记录
Aug 28 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
TypeScript基础入门教程之三重斜线指令详解
Oct 22 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
JS实现前端路由功能示例【原生路由】
May 29 Javascript
js实现数字跳动到指定数字
Aug 25 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
微信小程序 image组件遇到的问题
May 28 #Javascript
vue实现搜索功能
May 28 #Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 #Javascript
如何实现双向绑定mvvm的原理实现
May 28 #Javascript
vue实现带复选框的树形菜单
May 27 #Javascript
vue实现按需加载组件及异步组件功能
May 27 #Javascript
Vue实现导航栏点击当前标签变色功能
Aug 19 #Javascript
You might like
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
Javascript this 的一些学习总结
2012/08/02 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
对js关键字命名的疑问介绍
2014/04/25 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
React实现全选功能
2020/08/25 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[01:05:40]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第三场
2014/05/24 DOTA
使用Python操作excel文件的实例代码
2017/10/15 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python 实现对文件夹中的图像连续重命名方法
2018/10/25 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
大学生个人事迹材料
2014/01/21 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js