【Vue.js 入门与实战】--品牌案例-根据关键字实现数组的过滤

简介: 一、 search方法获取数据二、 forEach+indexOf方法过滤数据三、 filter+includes方法过滤数据

品牌案例-根据关键字实现数组的过滤

 

 

内容简介:

一、  search方法获取数据

二、  forEach+indexOf方法过滤数据

三、  filter+includes方法过滤数据

 

一、 search方法获取数据

在搜索名称关键字输入内容,data跟着其改变,表格中的数据也要随着进行相关的筛选。

 

页面中的业务表是通过代码中的Vue指令(v-for)循环限制出来的,当在搜索名称关键字文本框中输入内容,就会重新渲染出来一个表格,所以应该获取到最新的数据,就不能写死list,如果写死list,永远拿到的都是data里面的list,这样是不行的。

 

使用list只能获取data里面的值,不能获取到新的值,所以应该让渲染出来表格的数据跟着搜索框变化,使用search方法传入keywords,就能获取到data中的任何数据。

 

之前,v-for中的数据都是从data上的list中直接渲染过来的;现在,我们自定义了一个search方法,同时,把搜索的关键字,通过传参的形式,传递给了search方法。

 

search方法内部,通过执行for循环,把所有符合搜索关键字的数据,保存到一个新数组中,返回。

当它返回后,再进行v-for循环,就是符合条件的数据。那么就定义一个search(keywords)方法,根据关键字进行数据的搜索,再循环list获取数据。

 

 

二、forEach+indexOf方法过滤数据

forEach结合indexOf查找所需要的条件;先循环list,然后item(循环的每一项),用item中的namekeywords进行比较,看item.name是否包含keywords,如果包含,

就应该把item重新存起来,在外面定义一个newList空数组,用if语句判断是否包含关键字,用indexOfkeywords传进来,再用!=-1来判断是否包含,

接着push一下item,经过完整的forEach循环最后返回newList,实现数据过滤功能。

空字符串也包含在其中。

var newList = []

this.list.forEach(item=>){

 if(item.name.indexOf(keywords)) !=-1){

     newList.push(item)

     }

})

return newList

 

三、filter+includes方法过滤数据

1.filter方法

this.list.filter(item=>{})item代表用filter循环的每一项。

注意:forEach,some,filter,findIndes这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关操作。

 

在操作或循环中有区别,forEach不能被终止;some可以通过return true进行终止;filter用来进行过滤,把查询到的,符合条件的,返回得到一个新数组;findIndex用来找到对象的索引。如果item.name还是包含keywords就进行return,返回一个新数组。ES6中,

为字符串提供了一个新方法,叫做String.prototype.includes('要包含的字符串')

如果包含,则返回true,否则返回false,最后直接return

return this.list.filter(item=>{

 if(item.name.include(keywords)){

    return item

   }

})

 

 

2.jQuery中的contains方法

(1)定义和用法:

①:contains选择器选取包含指定字符串的元素。

②该字符串可以是直接包含在元素中的文本,或者被包含于子元素中。

 

举例讲解:

<p>123哈哈哈<p>

<p>娃哈哈<p>

<p>345<p>

想要选取出带哈的p标签,就可以使用$(":contains()"),把所有内容里面包含哈的标签筛选出来,返回一个数组。

 

③经常与其他元素/选择器一起使用,来选择指定的组中包含指定文本的元素。

 

(2)语法:

$(":contains(text)")

 

完整代码,如下:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width,initi

al-scale=1.0">

< meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<script src="./lib/vue-2.4.0.js"></script>

<link rel="stylesheet" href="./lib/bootstrap-3.3.7.css">

</head>

<body>

<div id="app">

<div class="panel panel-primary">

<div class="panel-heading">

<h3 class="panel-title">添加品牌</h3>

</div>

<div class="panel-body form-inline " >

<lable>

 

Id:

<input type="text" class="form-control" v-model="id">

</lable>

<lable>

  Name:

    <input type="text" class="form-control" v-model="name">

</lable>

  <input type="button" value="添加" class="btn btn

-primary" @click="add()">

</div>

 </div>

<table class="table table-bordered table-hover table-striped">

<thead>

  <tr>

  <th>Id</th>

  <th>Name</th>

 <th>Ctime</th>

 <th>Operation</th>

 </tr>

   </thead>

   <tbody>

  <tr v-for="item in search(keywords)" : key="item.id">

     <td>{{ item.id }}</td>

     <td>{{ v-text=" item.name " }}</td>

     <td>{{ item.ctime }}</td>

     <td>

 <a href="@click.prevent ="del(item.id)"">删除</a>

</td>

    </tr>

   </tbody>

 </table>

</div>

 <script>

var vm = new Vue({

el: '#app',

data: {

 id: ' ',

name:' ',

list: [

  { id: 1, name:  '奔驰', ctime: new Date() },

  { id: 2, name:  '宝马', ctime: new Date() }

 ]

},

 methods: {

  add(){

    var car ={id: this.id, name:this.name, ctime:new Date()}

   this.list.push(car)

   }

  del(id){

      var index=this.list.findIndex(item=>){

         if (item.id == id) {

return true;

       }

})

this.list.splice(index, 1)

     }

    search(keywords){

      return this.list.filter(item=>{

       if(item.name.include(keywords)){

return item

        }

})

}

}

});

</script>

</body>

</html>

 

相关文章
|
2天前
|
JavaScript 开发者 UED
Vue入门到关门之第三方框架elementui
ElementUI是一个基于Vue.js的组件库,包含丰富的UI组件如按钮、表格,强调易用性、响应式设计和可自定义主题。适用于快速构建现代化Web应用。官网:[Element.eleme.cn](https://element.eleme.cn/#/zh-CN)。安装使用时,需在项目中导入ElementUI和其样式文件。
16 0
|
20小时前
|
JavaScript 前端开发 程序员
javascript基础(入门),当上项目经理才知道,推荐程序员面试秘籍
javascript基础(入门),当上项目经理才知道,推荐程序员面试秘籍
|
1天前
|
JavaScript 数据可视化 UED
用Vue搭建一个大屏数据可视化页面实战二(Vue实战系列)
用Vue搭建一个大屏数据可视化页面实战二(Vue实战系列)
|
1天前
|
JavaScript 前端开发 数据可视化
用Vue搭建一个大屏数据可视化页面实战一(Vue实战系列)
用Vue搭建一个大屏数据可视化页面实战一(Vue实战系列)
|
2天前
|
缓存 前端开发 搜索推荐
服务端渲染(SSR)与静态网站生成(SSG):Next.js入门
服务端渲染(SSR)与静态网站生成(SSG):Next.js入门
12 0
|
2天前
|
XML JavaScript 前端开发
【JavaScript】实战训练小项目-WebAPI
【JavaScript】实战训练小项目-WebAPI
9 1
|
2天前
|
JavaScript
Vue实战-组件通信
Vue实战-组件通信
7 0
|
2天前
|
JavaScript
Vue实战-将通用组件注册为全局组件
Vue实战-将通用组件注册为全局组件
7 0
|
2天前
|
JavaScript
通过使用online表单的获取使用,了解vue.js数组的常用操作
通过使用online表单的获取使用,了解vue.js数组的常用操作
|
2天前
|
存储 JavaScript 前端开发
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
9 0