vue实现实时搜索显示功能

yizhihongxing

要实现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中的$含义及其用法详解($xxx引用的位置)

    vue中的$含义及其用法详解 在Vue的实例上,我们可以发现一些以$开头的属性或方法,这些属性或方法就是Vue内部提供的一些API。这些具有特殊含义的$开头的属性和方法,叫做Vue的内置属性或内置方法。接下来,将详细讲解$开头的属性或方法及其用法详解。 $data $data指向组件实例的数据对象。通过访问$data属性,可以读取及修改组件的数据。例如: &…

    Vue 2023年5月28日
    00
  • Vue组件如何设置Props实例详解

    下面我详细讲解一下“Vue组件如何设置Props实例详解”的完整攻略。 什么是Props 在 Vue.js 中,父组件和子组件之间可以通过 props 传递数据。props 是一个接收组件传递数据的属性,并且只能从父组件传递到子组件。 使用 props 可以让我们对组件进行配置,父组件可以传递数据给子组件,子组件可以使用这些数据作为自己的属性。 如何设置 P…

    Vue 2023年5月27日
    00
  • 在项目中封装axios的实战过程

    在项目中封装axios能够使代码更加简洁易读,并且可以统一管理请求接口、请求头等信息,提高代码的可维护性和可拓展性。下面是封装axios的完整攻略: 步骤一:安装axios并创建实例 首先需要在项目中安装axios依赖包,通过npm仓库下载、或者使用CDN链接在html文件中引入。 安装命令:npm install axios 接着,我们需要在项目中创建一个…

    Vue 2023年5月28日
    00
  • 浅析Vue 中的 render 函数

    下面我将为你详细讲解“浅析Vue 中的 render 函数”的完整攻略。 什么是 render 函数 在 Vue 中,模板是数据与 DOM 的映射,我们通过编写模板可以将数据渲染到页面上。但是,在一些场景下,如大规模的复杂组件或者需要高度自定义渲染逻辑的场景,使用传统的模板语法显得力不从心。这时候可以使用 Vue 的 render 函数,它不仅可以让我们更加…

    Vue 2023年5月27日
    00
  • vue 数据(data)赋值问题的解决方案

    下面是关于“vue 数据(data)赋值问题的解决方案”的完整攻略,主要包括以下方面的内容: 问题背景 解决方案原理 解决方案具体实现及示例说明 总结 问题背景 在vue项目开发中,我们常常会遇到在方法中通过this.data的方式来赋值的问题。这种方式在大量运用时常常使代码变得很难维护。因此,我们需要了解如何通过一些方法或工具来解决数据赋值问题。 解决方案…

    Vue 2023年5月28日
    00
  • Vue之自定义事件内容分发详解

    Vue之自定义事件内容分发详解 Vue.js允许我们使用自定义事件来在组件之间传递数据。自定义事件需要发出方在适当的时候触发事件,接收方在实例中监听对应的事件。Vue.js给我们提供了$emit和$on方法来实现自定义事件。 自定义事件的分发可以使用一般的事件模型,也可以使用特殊的$emit方法来进行分发,让每个组件都有机会响应这个事件。 实现自定义事件 V…

    Vue 2023年5月29日
    00
  • ConstraintValidator类如何实现自定义注解校验前端传参

    要实现自定义注解校验前端传参,需要使用到Java中的ConstraintValidator类。以下是实现的步骤: 创建自定义注解 首先需要创建一个自定义注解,并定义需要校验的参数和校验条件。下面的示例定义了一个名为CheckPassword的注解,用来校验密码是否符合规定的长度和包含数字、字母和特殊字符: import javax.validation.Co…

    Vue 2023年5月29日
    00
  • vue-cli配置文件——config篇

    下面是关于“vue-cli配置文件——config篇”的完整攻略: 1. 概述 在使用Vue-cli构建Vue项目时,除了基础配置文件(如 package.json、index.html、main.js等),还有一些高级配置文件。其中,config目录下的配置文件是一些开发、打包、运行时的配置信息集合。 2. 细节 2.1 index.js index.js…

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