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使用命令行搭建单页面应用

    非常感谢您关注本网站,以下是对“详解Vue使用命令行搭建单页面应用”的完整攻略: 一、简介 Vue.js是一个流行的JavaScript框架,它使用MVVM模式来构建单页面应用程序。 而命令行是可以让我们方便地执行许多自动化任务的强大工具。接下来,我们将使用命令行来构建一个Vue.js单页面应用程序。 二、步骤 1. 安装Node.js和Vue.js 在开始…

    Vue 2023年5月28日
    00
  • Vue中this.$nextTick()的理解与使用方法

    理解this.$nextTick()方法 在Vue中,数据绑定是异步执行的,这意味着当我们改变了数据,没有立即反应到页面上。Vue的响应式系统会在下一次事件循环(Event Loop)中重新计算 DOM,并更新 DOM,这样可以保证性能。为了确保在DOM更新后再执行回调函数,可以使用Vue提供的方法:this.$nextTick()。 this.$nextT…

    Vue 2023年5月29日
    00
  • vue获取参数的几种方式总结

    Vue获取参数的几种方式总结 在Vue开发中,获取参数是必不可少的。Vue提供了多种方法来获取参数,本文将总结几种常见的方式。 1. 通过props获取参数 当一个组件需要从父组件获取参数时,可以使用props。通过在父组件的模版中为子组件的标签属性添加键值对(即props),在子组件实例中通过this访问props对象即可获取参数。 示例代码: <!…

    Vue 2023年5月27日
    00
  • gojs实现蚂蚁线动画效果

    为了实现蚂蚁线动画效果,可以使用gojs库中的动画和数据模型功能。下面是实现该效果的完整攻略: 创建GoJS图表数据模型 蚂蚁线动画效果需要使用GoJS的Layout模块。在Layout模块的输入上,需要创建一个数据模型,以描述要排列的节点及它们之间的连接关系。数据模型可以由JSON对象创建,包含节点和联系人数组。示例: var data = { nodeD…

    Vue 2023年5月28日
    00
  • Vue-router编程式导航的两种实现代码

    Vue-router 是 Vue.js 官方的路由管理器,它和 Vue.js 的核心深度集成,让构建单页应用变得非常容易。编程式导航是指在代码中手动改变路由的方式。Vue-router 提供了两种编程式导航的方法。 方法一:$router.push // 在组件内部使用 this.$router.push({ path: ‘/example’, query:…

    Vue 2023年5月27日
    00
  • vue.js整合vux中的上拉加载下拉刷新实例教程

    Vue.js整合Vux中的上拉加载下拉刷新实例教程 Vux是一个基于Vue.js的UI组件库,提供了大量易用的组件和工具。其中,上拉加载和下拉刷新是常用的功能,本文将介绍如何使用Vux实现上拉加载和下拉刷新。 准备工作 首先,需要安装Vux和Vue.js。 npm install vux vue –save 然后,在Vue.js中引入Vux: import…

    Vue 2023年5月27日
    00
  • 15 分钟掌握vue-next函数式api(小结)

    下面我会详细讲解“15 分钟掌握vue-next函数式api(小结)”的完整攻略。 标题 15 分钟掌握vue-next函数式api(小结) 内容 Vue 3.0中提供了许多新的函数式API,这些API尤其适合组合或动态创建组件。本文将介绍这些API的用途,并通过一些示例来帮助您更好地理解这些函数式API。 1. h 函数 h函数是Vue中用于创建虚拟DOM…

    Vue 2023年5月28日
    00
  • Vue.js之render函数使用详解

    下面是关于Vue.js之render函数使用的详解攻略: 什么是render函数 Render函数是Vue.js中的一项核心特性,它允许您使用JavaScript编写模板,这意味着你可以获得更多的控制和更灵活的方式来编写您的组件。 render函数的写法 在Vue.js中,Render函数使用一个函数来定义组件的渲染输出。这个函数包含一个参数——h,它是Vu…

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