vue项目实现搜索功能

2023-11-03

使用vue框架实现以下要求:

1、点击“首页“顶部搜索框,通过路由跳转到搜索页,并实现关键字模糊搜索功能

2、搜索页和首页下面用到的JSON数据自行模拟,并正确搜索渲染出来

3、在搜索页保留每次的搜索历史关键字,在搜索页的“历史搜索”中显示出来,最多展现出3个

4、点击搜索框左上角的箭头,可以历史回退到首页

5、点击删除,清空历史记录

 

 

 

 

 

 

流程:1、先全局安装vue(3.0版本)

安装vue命令:npm i  @vue/cli  -g

安装完后使用vue -V 检查vue的版本号

如果你嫌弃使用npm下载速度(服务器在国外),可以使用淘宝镜像(cnpm)下载,

首先安装淘宝镜像,cnpm才可以使用。

安装cnpm命令:npm install -g cnpm --registry=https://registry.npm.taobao.org

接着你就可以使用cnpm安装vue:  cnpm i  @vue/cli  -g

2、创建一个项目  

指令:vue create  项目名

如:vue create demo 

创建完成后 输入指令: cd demo    //进入demo文件夹

安装需要用到的模块(vant、axios)

安装vant指令: cnpm  i  vant  -save

安装axios指令: cnpm i axios --save

3、安装好项目所用的依赖包后,执行npm run serve 指令启动项目

4、打开项目,找到src文件夹下的main.js文件,打开引入vant 、axios模块

import Vant from 'vant';  //引入vant模块

import 'vant/lib/index.css'; //引入vant样式

Vue.use(Vant); //使用vant

import axios from "axios"; //引入axios模块

Vue.prototype.$axios=axios;  //全局引入axios

5、将APP.vue中的内容注释或者删除成下面格式:

<template>

  <div id="app">

    <router-view/>

  </div>

</template>

6、如果不使用views(组件)内的Home.vue和About.vue可以删掉自己创建,

如果删掉,在router(路由文件夹)下index.js中删掉 import Home from '../views/Home.vue';

如果使用Home/About组件改为下面格式:

<template>
  <div></div>
</template>

<script>
export default {
  
}
</script>

<style scoped>

</style>

配置路由:找到router文件夹下的index.js,具体路由配置如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

  const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue')
  },
  {
    path: '/searchResult',
    name: 'searchResult',
    component: () => import('../views/searchResult.vue')
  }
]
const router = new VueRouter({
  routes
})

export default router

7、在Home.vue写跳转(获取焦点时触发事件),内容如下:

<template>
  <div>
      <!-- search 搜索 -->
      <van-search placeholder="请输入搜索关键词" @focus="skip"/>
      <!-- 获取焦点事件 -->
      <!-- 注:@符号,是v-on的简写 事件绑定 -->
  </div>
</template>

<script>
export default {
  methods: {//事件方法
    skip(){//点击跳转搜索页面
      this.$router.push({
        path:"/About" //跳转到search.vue组件
      })
    }
  },
}
</script>

<style scoped>
</style>

8、在这里是自己写的json文件,在public文件夹下创建一个data.json文件,内容如下:

{
    "data": [{
            "img": "http://img10.360buyimg.com/mobilecms/s372x372_jfs/t1/107731/30/17594/128560/5eba1306E936bf76c/67c1b3f0811d4aad.jpg!q70.dpg.webp",
            "title": "空气循环扇"
        },
        {
            "img": "http://img14.360buyimg.com/mobilecms/s372x372_jfs/t1/144748/18/2025/197309/5efed6acEfda6e78b/a9c0fe200236e109.png.webp",
            "title": "语音鼠标"
        },
        {
            "img": "http://img14.360buyimg.com/mobilecms/s372x372_jfs/t1/149120/14/4563/205634/5f290affEe4b665e0/8516912f4c76bde5.jpg!q70.dpg.webp",
            "title": "沐浴露"
        },
        {
            "img": "http://img13.360buyimg.com/mobilecms/s372x372_jfs/t1/48916/34/14957/190813/5dbeae56E705d7279/6ebd871f40b96a83.jpg!q70.dpg.webp",
            "title": "机械手表"
        },
        {
            "img": "http://img10.360buyimg.com/mobilecms/s372x372_jfs/t1/100792/2/19183/141569/5e9bbedaE11c1dffb/1c71532df00d755a.jpg!q70.dpg.webp",
            "title": "护眼床头灯"
        }
    ],
    "list": [
        "空气循环扇",
        "语音鼠标",
        "沐浴露",
        "机械手表",
        "护眼床头灯"
    ]
}

9、在About.vue组件中,内容如下:

<template>
  <div>

    <form action="/">
      <van-search
        v-model="value"
        show-action
        placeholder="请输入搜索关键词"
        @search="onSearch"
        @input="change"
      />
    </form>
    <van-cell-group v-show="value!=''">
      <van-cell v-for="(item,index) in zhineng" :key="index" :title="item" @click="clickTit(item)" />
    </van-cell-group>
    <div v-show="value==''">
        <van-cell-group>
      <van-cell title="搜素历史">
        <template #right-icon>
          <div class="item-delete">
            <van-icon name="delete" @click="del" />
          </div>
        </template>
      </van-cell>
    </van-cell-group>
    <div>
      <van-tag
        plain
        type="primary"
        v-for="(item,index) in histroy"
        :key="index"
        style="margin-left:8px"
        @click="clickHistroy(item)"
      >{{item}}</van-tag>
    </div>
    </div>
    
  </div>
</template>

<script>
export default {
  data() {
    return {
      imgShow:true,//进入页面是的状态,默认显示
      value: "", //输入搜索的关键字
      histroy: [], //存放搜索历史关键字
      zhineng: [], //智能提示
    };
  },
  mounted() {
    //挂载
    this.histroy = JSON.parse(localStorage.getItem("histroy")) || [];
  },
  methods: {
    onSearch(val) {
      //确定搜索时触发(并把关键字传到搜索列表中)
      // 判断输入内容不能为空
      if (this.value.trim() == "") {
        return false;
      }
      // 添加
      let rel = true;
      // 判断去重
      this.histroy.map((item) => {
        if (item == this.value) {
          rel = false;
        }
      });

      // 搜索历史在页面最多显示3条
      if (rel) {
        if (this.histroy.length >= 3) {
          this.histroy.pop(); //数组末尾删除
          this.histroy.unshift(this.value);
        } else {
          this.histroy.unshift(this.value);
        }
      }
      this.save();

      //   跳转页面并传参数到搜索列表页中
      this.$router.push({
        path: "/searchList",
        query: {
          kw: this.value,
        },
      });
      this.value = ""; //添加后清空
    },
    clickTit(item){//点击智能提示
        this.value=item;
        this.onSearch();
    },
    clickHistroy(item){//点击搜索记录
        this.value=item;
        this.onSearch();
    },
    del() {
      //清空(删除历史记录)
      this.$dialog
        .confirm({
          message: "你确定要清空历史记录吗?",
        })
        .then(() => {
          this.histroy = [];
          localStorage.removeItem("histroy");
        })
        .catch(() => {});
    },
    change() {
      //智能事件
      this.zhineng=[];
      this.$axios.get("http://localhost:8080/data.json").then((res) => {
        let lists= res.data.list;
        lists.map(item=>{
            if(item.includes(this.value)){
                this.zhineng.push(item);
            }
        })
      });
    },
    save() {
      //保存到本地
      localStorage.setItem("histroy", JSON.stringify(this.histroy));
    },
  },
};
</script>

<style scoped>
</style>

10、在views文件夹下创建searchResult.vue组件,具体内容如下:

<template>
  <div>
    <van-nav-bar title="搜索列表" left-arrow @click-left="onClickLeft" />
    <van-card v-for="(item,index) in selChange" :key="index" :thumb="item.img">
      <template #title>
        <div class="item-title">{{item.title}}</div>
      </template>
    </van-card>
  </div>
</template>

<script>
export default {
  data() {
    return {
      kw: this.$route.query.kw, //搜索关键字
      list: [], //所有数据
    };
  },
  mounted() {//挂载
    // 请求数据
    this.$axios.get("http://localhost:8080/data.json").then((res) => {
      this.list = res.data.data;
    });
  },
  methods: {
    onClickLeft() {
      //返回搜索首页
      this.$router.push({
        path: "/About",
      });
    },
  },
  computed: {//计算属性
    selChange() {
      // 把请求回来的数据过滤,然后显示
      var news = this.list.filter((item) => {
        if (item.title.indexOf(this.kw) != -1) {
          return item;
        }
      });
      return news;
    },
  },
};
</script>

<style scoped>
.item-title {
  height: 88px;
  font-size: 18px;
  /* background: red; */
  display: flex;
  align-items: center;
}
</style>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue项目实现搜索功能 的相关文章

随机推荐

  • Valve.VR.SteamVR_AutoEnableVR_UnityPackage.Update () (at Assets/SteamVR/Editor/SteamVR_AutoEnableVR_

    unity 中导入 Steam Vr puls 报错 Valve VR SteamVR AutoEnableVR UnityPackage Update at Assets SteamVR Editor SteamVR AutoEnable
  • 适配ios13

    更新Xcode之后 新项目需求 新建项目发现多了如图1所示两个新的文件SceneDelegate h和SceneDelegate m 运行之后发现黑屏 无论是真机还是模拟器都不行 换到iOS12的手机上则可以正常运行 查看官方文档 Scen
  • Charge IC logic Q&A

    Q Q4 关断有哪些影响 A 1 充电停止 2 Vbat 到 Vsys 通路被断开 Vbus 到 Vsys 通路不受影响 Q Q4 可能被打开的情况 A 1 手机时 shipmode 模式时插入充电器 2 清除 BATFET DIS 标志位
  • pytorch查看网络模型变量以及对应的尺寸

    今天看代码发现 自己对于网络中需要更新的参数并不是很熟悉 然后百度发现了这个方法 记录一下 在自己定义的模型下面加入这一行就可以查看了 for name param in model named parameters print name
  • 【JAVA面试题】为什么会出现4.0-3.6=0.40000001这种现象?

    这种舍入误差的主要原因是 浮点数值采用二进制系统表示 而在二进制系统中无法精确地表示分数 1 10 这 就好像十进制无法精确地表示分数 1 3 样 如果在数值计算中不允许有任何舍入误差 就应该使用 BigDecimal类 浮点数值不适用于无
  • mysql drop语句怎么用_SQL DROP 语句

    http www cnblogs com troywithblog archive 2013 05 24 3096515 html 通过使用 DROP 语句 可以轻松地删除索引 表和数据库 SQL DROP INDEX 语句 我们可以使用
  • sql delete删除的数据怎么恢复_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?...

    简单删除和Shift Delete永久删除 想删除电脑上的任何文件 有以下两种方式 按 DELETE 键简单删除文件 在这种模式下 文件被移动到回收站 此时 如果我们想要恢复已删除的文件和资料夹 请打开回收站 在文件上按右键选择 还原 按
  • Proxmox VE ZFS 开启Thin Provision(精简配置)

    前言 最近在为一台PVE 的VM添加大容量磁盘时 20T 遇到out of disk 错误 遂发现 ZFS在没有开启Thin Provision前 会提前分配磁盘空间 即使一个字节也没有写入 在开启Thin Provision 后问题得到解
  • 【Unity插件】最多的插件合集

    一 前言 最近整理了一下文章 发现我分享了很多的插件 但是如果要查找某一款插件 还需要去搜索才能找到 很不方面 就想要将写过的所有的插件分享也好 教程也好 做一个汇总 然后这篇文章还会不断的更新 在有新的插件之后 熟悉我的人都知道 我对插件
  • python 逆向

    1 目标网址 https www qimingpian com finosda project pinvestment 2 抓包查看响应体 3 数据加密 4 打上断电进行调试 5 抠出代码进行运行 6 总结 function o t 就是我
  • shell sed过滤器详解

    1 Sed简介sed 是一种在线编辑器 它一次处理一行内容 处理时 把当前处理的行存储在临时缓冲区中 称为 模式空间 pattern space 接着用sed命令处理缓冲区中的内容 处理完成后 把缓冲区的内容送往屏幕 接着处理下一行 这样不
  • 怎么维护自己的电脑

    文章目录 我的电脑 日常维护措施 维护技巧 键盘 屏幕清洁 清理磁盘空间 控制温度 电脑换电池 无论是学习还是工作 电脑都是IT人必不可少的重要武器 一台好电脑除了自身配置要经得起考验 后期主人对它的维护也是决定它寿命的重要因素 你日常是怎
  • 开讲啦!0基础也能玩转飞桨开源社区

    作为cs ai学生 你是否经历过这些至暗时刻 希望快速入门深度学习 无奈网上到处都是看不懂 黑话 一遍遍计算综测小数点后四位 不断在保研边缘反复横跳 看着 洁白如新 的履历叹气 一听到 考研复试 就头皮发麻 0实习 的标签在求职时毫无竞争力
  • 主变压器新装或大修后投入运行为什么有时气体继电器会频繁动作?遇到此类问题怎样判断和处理?

    主变压器新装或大修后投入运行为什么有时气体继电器会频繁动作 遇到此类问题怎样判断和处理 答 新装或大修的变压器在加油 滤油时 会将空气带入变压器内部 若没有能够及时排出 则当变压器运行后油温会逐渐上升 形成油的对流 将内部贮有的空气逐渐排除
  • 个人信息可携带权的中国路径(线上)研讨会

    个人信息保护法 将于今年11月1日正式实施 其中首次提出了个人信息可携带权的相关法条 体现了将个人信息权利还于个人的立法思路 也为进一步释放数据要素生产力带来了新的历史机遇 为深入了解个人信息可携带权在全球范围的发展及在中国的可行落地路径
  • lstm(三) 模型压缩lstmp

    lstmp结构 对于传统的lstm而言 i t W i
  • Linux专栏(二):创建虚拟机与Ubuntu安装

    文章目录 1 下载Ubuntu20 04镜像 2 创建虚拟机 3 安装Ubuntu系统 本文将介绍在VMware中如何创建虚拟机并安装Ubuntu20 04系统 1 下载Ubuntu20 04镜像 下载地址 Ubuntu官网镜像下载 2 创
  • 复旦NLP团队发布80页大模型Agent综述,一文纵览AI智能体的现状与未来

    来源 机器之心 智能体会成为打开 AGI 之门的钥匙吗 复旦 NLP 团队全面探讨 LLM based Agents 近期 复旦大学自然语言处理团队 FudanNLP 推出 LLM based Agents 综述论文 全文长达 86 页 共
  • block(块),page(页),buffer cache(块缓冲)区别与联系

    在自己的理解里 块就是用来管理磁盘空间的 就像我们在给一个磁盘建立文件系统时候 我们可以指定block size 而页是针对内存管理 例如从磁盘读出的数据就缓存在内存页中 但突然对关buffer cache block buffer 这些东
  • vue项目实现搜索功能

    使用vue框架实现以下要求 1 点击 首页 顶部搜索框 通过路由跳转到搜索页 并实现关键字模糊搜索功能 2 搜索页和首页下面用到的JSON数据自行模拟 并正确搜索渲染出来 3 在搜索页保留每次的搜索历史关键字 在搜索页的 历史搜索 中显示出