vue实现实时搜索显示功能

要实现Vue实时搜索显示功能,有以下几个步骤:

  1. 创建Vue实例
  2. 绑定数据
  3. 创建搜索过滤器
  4. 创建搜索输入框
  5. 显示搜索结果

下面我们来详细讲解这个完整攻略。

创建Vue实例

首先要创建Vue实例,这可通过引入Vue库来实现。需要在HTML文件中引入如下代码:

<script src="https://cdn.jsdelivr.net/npm/vue"></script>

然后在JS中创建Vue实例,如下所示:

var app = new Vue({
  el: '#app',
  data: {
    products: [
      { name: 'iPhone X', price: 7999 },
      { name: 'Macbook Pro', price: 12999 },
      { name: 'iPad Pro', price: 6999 },
      { name: 'iMac', price: 10999 }
    ],
    searchKey: ''
  },
});

这里我们通过data选项来定义一个对象products,表示商品列表,和一个字符串searchKey,表示搜索关键字。

绑定数据

接下来,在HTML中创建表格,将products对象绑定到表格中。具体代码如下:

<div id="app">
  <input type="text" v-model="searchKey" placeholder="Type to search...">
  <table>
    <thead>
      <tr>
        <th>Name</th>
        <th>Price</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="product in filteredProducts">
        <td>{{ product.name }}</td>
        <td>{{ product.price }}</td>
      </tr>
    </tbody>
  </table>
</div>

这里我们通过v-for指令将products对象中的每个元素都渲染到表格中。同时,我们用v-model指令将搜索文本框和searchKey变量绑定起来。

创建搜索过滤器

接下来要创建一个搜索过滤器,在JS中添加如下代码:

Vue.filter('search', function (value, keyword) {
  if (!keyword) return value;
  keyword = keyword.toLowerCase();
  return value.filter(function (product) {
    return product.name.toLowerCase().indexOf(keyword) !== -1;
  });
});

这样我们就创建了一个名为search的全局过滤器,这个过滤器会接收一个数组value和一个字符串keyword。然后我们将keyword转换为小写字母,接着使用filter()方法来过滤value数组。如果product.name中包含了keyword,则将其保留下来。最终返回过滤后的数组。

创建搜索输入框

现在我们需要创建一个搜索输入框,并将之前定义的searchKey绑定到搜索输入框上。具体的代码如下:

<input type="text" v-model="searchKey" placeholder="Type to search...">

显示搜索结果

最终的步骤就是显示搜索结果了。我们需要在HTML中使用v-for指令来循环遍历filteredProducts数组来显示搜索结果。代码如下:

<tbody>
  <tr v-for="product in filteredProducts">
    <td>{{ product.name }}</td>
    <td>{{ product.price }}</td>
  </tr>
</tbody>

同时,在Vue实例的computed选项中定义filteredProducts计算属性,这个计算属性会返回经过search过滤器处理后的products数组。代码如下:

var app = new Vue({
  el: '#app',
  data: {
    products: [
      { name: 'iPhone X', price: 7999 },
      { name: 'Macbook Pro', price: 12999 },
      { name: 'iPad Pro', price: 6999 },
      { name: 'iMac', price: 10999 }
    ],
    searchKey: ''
  },
  computed: {
    filteredProducts: function () {
      return this.products.filter(function (product) {
        return product.name.toLowerCase().indexOf(this.searchKey.toLowerCase()) !== -1;
      }.bind(this));
    }
  }
});

这里我们定义了一个名为filteredProducts的计算属性,这个属性会返回经过search过滤器处理后的products数组。我们使用filter()方法对products数组进行过滤,只留下符合关键字搜索的元素。注意在filter()方法中要使用bind()方法来绑定作用域。

综上所述,这就是Vue实现实时搜索显示功能的完整攻略。下面分别给出两个示例说明。

示例1:搜索学生信息

假设我们有一个存放学生信息的数组,现在需要实现在输入搜索关键字的时候,能够实现实时搜索,并显示搜索结果。代码如下:

HTML

<div id="app">
  <input type="text" v-model="searchKey" placeholder="Type to search...">
  <table>
    <thead>
      <tr>
        <th>Name</th>
        <th>Age</th>
        <th>Gender</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="student in filteredStudents">
        <td>{{ student.name }}</td>
        <td>{{ student.age }}</td>
        <td>{{ student.gender }}</td>
      </tr>
    </tbody>
  </table>
</div>

JS

var app = new Vue({
  el: '#app',
  data: {
    students: [
      { name: '张三', age: 18, gender: '男' },
      { name: '李四', age: 20, gender: '女' },
      { name: '王五', age: 19, gender: '男' },
      { name: '赵六', age: 21, gender: '女' }
    ],
    searchKey: ''
  },
  computed: {
    filteredStudents: function () {
      return this.students.filter(function (student) {
        return student.name.toLowerCase().indexOf(this.searchKey.toLowerCase()) !== -1;
      }.bind(this));
    }
  }
});

示例2:搜索商品信息

假设我们有一个存放商品信息的数组,现在需要实现在输入搜索关键字的时候,能够实现实时搜索,并显示搜索结果。代码如下:

HTML

<div id="app">
  <input type="text" v-model="searchKey" placeholder="Type to search...">
  <table>
    <thead>
      <tr>
        <th>Name</th>
        <th>Price</th>
        <th>Qty</th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="product in filteredProducts">
        <td>{{ product.name }}</td>
        <td>{{ product.price }}</td>
        <td>{{ product.qty }}</td>
      </tr>
    </tbody>
  </table>
</div>

JS

var app = new Vue({
  el: '#app',
  data: {
    products: [
      { name: 'iPhone X', price: 7999, qty: 30 },
      { name: 'Macbook Pro', price: 12999, qty: 20 },
      { name: 'iPad Pro', price: 6999, qty: 50 },
      { name: 'iMac', price: 10999, qty: 10 }
    ],
    searchKey: ''
  },
  computed: {
    filteredProducts: function () {
      return this.products.filter(function (product) {
        return product.name.toLowerCase().indexOf(this.searchKey.toLowerCase()) !== -1;
      }.bind(this));
    }
  }
});

这两个示例都是基于Vue实现实时搜索显示功能的完整攻略,只是在数据方面有所不同。如果需要使用该功能,可根据自己的数据类型来进行相应的更改。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现实时搜索显示功能 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue虚拟DOM详细介绍

    Vue虚拟DOM详细介绍 什么是虚拟DOM 虚拟DOM(Virtual DOM)是指用JavaScript对象模拟真实DOM的一种技术。在Vue中,全部视图都是通过虚拟DOM来实现。 由于真实DOM对于JavaScript的操作过于频繁,因此虚拟DOM被设计出来,用于减少频繁操作真实DOM的次数。当数据发生变化时,Vue先对虚拟DOM进行操作,再通过diff…

    Vue 2023年5月28日
    00
  • 项目中如何使用axios过滤多次重复请求详解

    当我们在使用axios发起多次请求时,若存在多个相同的请求,会导致冗余的网络请求,浪费带宽和服务器资源,因此,我们需要一种方法来过滤重复的请求。下面是在项目中如何使用axios过滤多次重复请求的完整攻略。 核心思路 使用axios-middleware拦截所有的请求,将每次请求的url和method做一个唯一标识,然后将这个唯一标识作为缓存中的key,将请求…

    Vue 2023年5月28日
    00
  • vue中使用 pako.js 解密 gzip加密字符串的方法

    下面是详细讲解vue中使用pako.js解密gzip加密字符串的方法的完整攻略: 准备工作 引入pako.js库 确定gzip加密字符串的编码方式 解密过程 将gzip加密字符串进行base64解码转化成一个UInt8Array类型的数组 let str = "H4sIAAAAAAAAAKvLy0zJzcy00ElVQJDmFhYWFgYGBlJY…

    Vue 2023年5月27日
    00
  • Vue.js实现立体计算器

    Vue.js实现立体计算器攻略 本文将详细介绍使用Vue.js实现立体计算器的步骤。我们的目标是通过Vue.js搭建一个可交互的立体计算器,支持用户输入高度、宽度、深度等参数,计算并呈现长方体、正方体和球体的体积、表面积等信息。本攻略将包括以下步骤: 搭建基础的Vue.js环境 设计计算器UI界面 实现计算器的基本逻辑 添加计算公式 总结 1. 搭建基础的V…

    Vue 2023年5月28日
    00
  • vue-vuex中使用commit提交mutation来修改state的方法详解

    当我们使用Vue.js + Vuex进行项目开发时,我们需要通过commit提交mutation来修改state。以下是使用commit提交mutation修改state的详细步骤: 1. 创建Vuex Store 我们首先要在项目中创建Vuex Store,Store是一个对象,包含着我们需要管理的状态(state)、变更状态的方法(actions、mut…

    Vue 2023年5月28日
    00
  • vue中数据不响应的问题及解决

    当使用Vue来开发网页应用时,经常会遇到组件无法响应数据(data)变化的问题,这是因为Vue的数据绑定特性需要满足一定的条件才能生效。接下来我们将介绍如何解决这个问题。 问题分析 在Vue中,如果数据绑定不生效,这通常是因为以下几个原因: 数据未被正确地注入到Vue实例中。 未使用正确的数据绑定方式。 数据变化没有触发Vue的重新渲染。 下面一一对这些原因…

    Vue 2023年5月28日
    00
  • vue中如何去掉空格的方法实现

    首先需要明确一下,“vue中如何去掉空格的方法实现”这个问题具体指什么样的空格。如果是指字符串中的空格,那么可以采用 JavaScript 内置的字符串方法 replace() 来实现去除,示例如下: // 去除字符串中所有空格 let str = ‘ hello world ‘ str = str.replace(/\s/g, ”) console.lo…

    Vue 2023年5月27日
    00
  • vue更新数据却不渲染页面的解决

    下面是关于Vue更新数据却不渲染页面的解决攻略的详细讲解。 问题背景 在Vue中,一般我们通过修改组件的数据来更新页面。但有时候在修改数据后,页面却没有自动更新,这可能会给我们带来很多困扰。这种情况在Vue中被称作“数据更新但是视图不更新”。 可能出现原因 造成“数据更新但是视图不更新”的原因主要有以下几种: Vue的异步更新机制:当我们修改Vue中的数据时…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部