广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现简单搜索功能的示例代码
  • 893
分享到

Vue实现简单搜索功能的示例代码

Vue实现搜索功能Vue搜索功能Vue搜索 2023-03-19 17:03:06 893人浏览 独家记忆
摘要

目录1、概述2、功能逻辑2.1功能流程2.2 流程图3、功能实现3.1 Vue组件化3.2 代码3.3 动态效果1、概述 在vue项目中,搜索功能是我们经常需要使用的一个场景,最常用

1、概述

在vue项目中,搜索功能是我们经常需要使用的一个场景,最常用的是在列表数据中搜索一个想要的,今天的例子就是我们实现vue从列表数据中搜索,并展示。如下图所示:

2、功能逻辑

2.1功能流程

这里我们进行简单搜索功能,搜索逻辑是只要用户输入值与产品的名称进行模糊匹配,符合条件的数据进行展示,不符合条件的数据过滤。流程描述如下:

  • 用户点击搜索框,输入内容;
  • 检测到搜索框值变化,取用户输入值;
  • 对用户输入值进行判断,若为空,则展示原列表,不为空则进行筛选;
  • 将用户输入值与所有列表数据进行遍历匹配,若匹配,则展示匹配条目,完成搜索。

2.2 流程图

这张图仅代表最简单的搜索流程,若需要进行一些复杂的处理,可以进行修改,比如说匹配的商品名称关键字变色等。

3、功能实现

3.1 vue组件化

实现如上图功能,我们肯定是使用vue的组件特性,将搜索以及,产品列表抽成组件,以提高代码复用性,抽成组件之后,该页面将由三个部分组成,数据在以下三个组件之间传递:

  • 父组件:主页面,用于数据逻辑处理;
  • 搜索组件:给父组件传递用户输入值;
  • 列表:展示从父组件接收的值。

3.2 代码

父组件:index.vue

<template>
  <div>
    <title-bar :title="title" @GoBack="goback"></title-bar>
    <search-input 
      :plhText="searchPlhText"
      @input-changed="searchInputChange"
    ></search-input>
    <div v-for="(prd,index) in productListRst" :key="index">
      <prd-item :prd="prd" @toPrdDetail="toPrdDetail"></prd-item>
    </div> 
  </div>
</template>
<script>
import TitleBar from "@/components/TitleBar";
import SearchInput from "./components/SearchInput";
import PrdItem from './components/PrdItem';
export default {
  name: "",
  components: {
    TitleBar,
    SearchInput,
    PrdItem
  },
  data() {
    return {
      title: "产品列表",
      searchPlhText: "请输入产品名称",
      productList: {}, // 产品列表
      productListRst: {}, // 搜索筛选之后的产品列表
    }
  },
  created() {
    // 初始化页面参数,按照生命周期,子组件需要的参数父组件需要在created生命周期取值
    this.initParams();
  },
  methods: {
    // 返回方法
    goback() {
      // this.$emit("GoBack");
    },
    // 初始化页面参数,获取产品列表
    initParams() {
      this.productList = [
        {
          imgPath: 'apple-1001.png',
          name: 'Apple iPad Air 平板电脑(2020新款)',
          price: '4799.00',
          sale: '5',
          ranking: '10000+评价 平板热卖第5名',
          prdShopName: 'Apple官方旗舰店'
        },
        {
          imgPath: 'apple-1002.png',
          name: 'Apple iPhone 11手机',
          price: '4999.00',
          sale: '5',
          ranking: '375万+评价',
          prdShopName: 'Apple官方旗舰店'
        },
        {
          imgPath: 'apple-1003.jpg',
          name: 'Apple AirPods 配充电盒 Apple蓝牙耳机',
          price: '1246.00',
          sale: '5',
          ranking: '200万+评价',
          prdShopName: 'Apple官方旗舰店'
        },
      ];
      this.productListRst = this.productList;
    },
    // 每次search框变化则进行筛选,对数据进行逻辑处理
    searchInputChange(value) {
      // 若未输入值,则展示所有数据
      if(null === value || undefined === value){
        this.productListRst = this.productList;
      } else {
        this.productListRst = []; // 结果列表置空
        let regStr =  '';
        // 初始化正则表达式
        for(let i=0; i<value.length; i++){
          regStr = regStr + '(' + value[i] + ')([\\s]*)'; //跨字匹配
        }
        let reg = new RegExp(regStr);
        console.log(reg);
        for(let i=0; i<this.productList.length; i++){
          let name = this.productList[i].name; //按照名字匹配
          let regMatch = name.match(reg);
          if(null !== regMatch) {// 将匹配的数据放入结果列表中
             this.productListRst.push(this.productList[i]);
          }
        }
      }
    },
    // 去往产品详情页
    toPrdDetail(){
      this.$router.push({path: 'detail'})
    }
  }
};
</script>
<style scoped>
#page-title {
  width: 100%;
  background-color: #fff;
  display: flex;
  justify-content: center;
}
.backImg {
  width: 20px;
}
</style>

主要的逻辑处理是 searchInputChange,对于更复杂的搜索逻辑,也可以在里面进行处理。

搜索组件:searchInput.vue

<template>
  <div class="search-box">
    <div class="search-input">
      <img src="@/assets/images/search.png" />
      <input
        type="text"
        :placeholder="plhText"
        maxlength="10"
        @change="inputChange"
        v-model="inputValue"
      />
    </div>
  </div>
</template>
<script>
export default {
  name: "searchInput", // 搜索输入框
  props: {
    // input框占位文字
    plhText: {
      type: String,
      default: "请输入搜索内容"
    }
  },
  data() {
    return {
      inputValue: "" //输入框的值
    };
  },
  methods: {
    // 每次输入框变化刷新列表
    inputChange() {
      // 使用emit给父组件传值
      this.$emit('input-changed', this.inputValue);
    }
  }
};
</script>

列表组件:productList.vue

<template>
  <div class="prd-item" @click="toPrdDetail">
    <img :src="require('@/assets/images/'+prd.imgPath)">
    <div class="prd-discription">
      <div class="prd-title">{{ prd.name }}</div>
      <div class="prd-sellInfo">
        <div class="prd-price">{{ prd.price }}</div>
        <div class="prd-saleLable" v-if="prd.sale.lenght!==0">
          <label>12期免息</label>
          <span>新品</span>
        </div>
        <div class="prd-ranking">{{ prd.ranking }}</div>
        <div class="prd-shop">{{ prd.prdShopName }}</div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  props: {
    // 传入产品对象,必传属性为imgPath,name,price,shop
    prd: {
      type: Object,
    }
  },
  methods: {
    // 跳转产品详情页面
    toPrdDetail() {
      this.$emit("to-prd-detail",this.prd.Id);
    }
  }
};
</script>

标题头组件:titleBar

<template>
  <div class="page-title">
    <div class="backImg" @click="goBack">
      <img src="@/assets/images/arrow_left.png" />
    </div>
    <div class="titleText">
      <label>{{ title }}</label>
    </div>
    <div v-if="showRightArea" class="rightImg">
      <img :src="rightImgPath" />
    </div>
  </div>
</template>
<script>
export default {
  name: "titleBar",
  props: {
    // 标题
    title: {
      type: String, //规定数据类型
      default: "标题" //默认值
    },
    showRightArea: {
      type: Boolean,
      default: false
    },
    rightImgPath: {
      type: String
    }
  },
  methods: {
    // 返回方法
    goBack() {
      this.$emit("go-back");
    }
  }
};
</script>
<style lang="sCSS" scoped>
.page-title {
  width: 100%;
  background-color: #fff;
  display: flex;
  padding: 10px 0;
  justify-content: flex-start;
}
.backImg {
  width: 15%;
  text-align: center;
  img {
    margin: 0 auto;
    width: 24px;
  }
}
.titleText {
  font-size: 18px;
  height: 26px;
  width: 70%;
  text-align: center;
  label {
    margin: 0 auto;
  }
}
.rightImg {
  width: 15%;
  text-align: center;
  img {
    margin: 0 auto;
    width: 24px;
  }
}
</style>

以上代码为部分代码,css代码不包含在内。

3.3 动态效果

以上代码实现的效果如下动态图:

到此这篇关于Vue实现简单搜索功能的示例代码的文章就介绍到这了,更多相关Vue搜索功能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue实现简单搜索功能的示例代码

本文链接: https://www.lsjlt.com/news/200269.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue实现简单搜索功能的示例代码
    目录1、概述2、功能逻辑2.1功能流程2.2 流程图3、功能实现3.1 vue组件化3.2 代码3.3 动态效果1、概述 在vue项目中,搜索功能是我们经常需要使用的一个场景,最常用...
    99+
    2023-03-19
    Vue实现搜索功能 Vue搜索功能 Vue搜索
  • Vue如何实现简单搜索功能
    这篇文章主要讲解了“Vue如何实现简单搜索功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue如何实现简单搜索功能”吧!1、概述在vue项目中,搜索功能是我们经常需要使用的一个场景,最常...
    99+
    2023-07-05
  • react+axios实现github搜索用户功能(示例代码)
    加载 请求成功 请求失败 在文件路径点击cmd 回车 首先把服务器打开 npm start app.js import React, { Component } ...
    99+
    2022-11-12
  • Mysql实现简易版搜索引擎的示例代码
    目录前言简介ngram 全文解析器创建全文索引检索方式1、自然语言检索(NATURAL LANGUAGE MODE)2、布尔检索(BOOLEAN MODE)与 Like 对比总结前言...
    99+
    2022-11-12
  • Android实现简单动态搜索功能
    目录前言一、addTextChangedListener二、本文案例1.介绍一下SearchView的一些方法2.准备数据3.初始化以及填充数据4.在SearchView中用户输入字...
    99+
    2022-11-13
  • vue实现实时搜索显示功能
    本文实例为大家分享了vue实现实时搜索显示的具体代码,供大家参考,具体内容如下 <template> //绑定搜索的关键字 <input type="text" ...
    99+
    2022-11-13
  • 怎么用ajax实现简单搜索功能
    这篇文章主要讲解了“怎么用ajax实现简单搜索功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用ajax实现简单搜索功能”吧!本文实例讲述了基于aja...
    99+
    2022-10-19
  • Python实现简单的索引排序与搜索功能
    今天,我上的课,学了索引排序与搜索。让我们用Python实现,觉得有点意思就跟大家分享一波。 代码如下图: import requests import re def News...
    99+
    2022-11-12
  • 简单实现Android端搜索框示例详解
    目录正文一、效果展示二、快速使用及属性介绍快速使用具体代码主要方法介绍1、搜索框监听2、搜索列表点击事件3、改变最近(历史)搜索item背景4、动态设置热门搜索热度属性介绍Searc...
    99+
    2022-11-13
    Android端搜索框 Android 搜索框
  • Vue实现全局菜单搜索框的示例
    目录前言一、过滤路由二、搜索框展示路由三、雏形出现但有缺陷四、优化搜索方式五、完整代码展示结论前言 本篇文章分享一下我在实际开发 Vue 项目时遇到的需要 —&mdash...
    99+
    2023-02-09
    Vue 全局菜单搜索框 Vue 搜索框
  • Android实现高亮搜索功能的示例
    目录首先看效果图:使用方法:1、普通场景使用2、在DataBinding中使用首先看效果图: 整词高亮: 分词高亮: 下面贴上我封的方法 fun stringToHig...
    99+
    2022-11-12
  • vue+element实现下拉菜单并带本地搜索功能示例详解
    需求: 后台返回数组对像,前端组合成数组,根据name组合成一个个数组并把后台返回的值当成一个children推入数组,在数组中自定义属性备份数据防止搜索的时候改变原数组使得数组无...
    99+
    2022-11-12
  • 微信小程序实现简单搜索功能
    本文实例为大家分享了微信小程序实现简单搜索功能的具体代码,供大家参考,具体内容如下 搜索效果图 实现功能如下 (1) 未找到商品时显示提示信息,找到商品时显示商品列表 (2) 清空...
    99+
    2022-11-13
  • Android怎么实现简单动态搜索功能
    本篇内容介绍了“Android怎么实现简单动态搜索功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言提到Android的动态搜索,大多应...
    99+
    2023-06-30
  • vue elementui 实现搜索栏子组件封装的示例代码
    目录前言需求实现子组件(search.vue)父组件部分主要代码(index.vue)前言 描述: 在基本项目中搜索栏、分页组件格式样式几乎是固定的,只是对应的数据不同,由于模块会随...
    99+
    2022-11-13
  • Java实现二分搜索树的示例代码
    目录1.概念2.重点操作3.完整代码1.概念 a.是个二叉树(每个节点最多有两个子节点) b.对于这棵树中的节点的节点值 左子树中的所有节点值 < 根节点 < 右子树的所...
    99+
    2022-11-13
  • vue怎么实现实时搜索显示功能
    这篇“vue怎么实现实时搜索显示功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue怎么实现实时搜索显示功能”文章吧。效...
    99+
    2023-06-30
  • Vue实现输入框@功能的示例代码
    目录前言成员列表创建使用输入框获取光标的坐标保存光标插入文本运行结果总结前言 前几篇文章中分别介绍了如何实现聊天输入框的双向绑定、回车键发送、粘贴文本图片等功能,本着完善输入框的目的...
    99+
    2022-11-13
  • android实现搜索功能并将搜索结果保存到SQLite中(实例代码)
    运行结果: 涉及要点: ListView+EditText+ScrollView实现搜索效果显示 监听软键盘回车执行搜索 使用TextWatcher( )实时筛...
    99+
    2022-06-06
    SQLite Android
  • python实现简单爬虫功能的示例
    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材。 我们最常规的做法就是通过鼠标右键,选择另存为。但有些图片鼠标右键的时候...
    99+
    2022-06-04
    爬虫 示例 简单
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作