vue慕课网音乐项目手记:48-搜索历史数据的处理

因为搜索关键词在多个模块都有使用,所以要在vuex里面去定义和修改。 
state设置:

searchHistory: []

然后是mutation和types

[types.SET_SEARCH_HISTORY] (state, history) {
    // history接收一个数组
    state.searchHistort = history
  }
export const SET_SEARCH_HISTORY = ‘SET_SEARCH_HISTORY‘

然后是getters

export const searchHistory = state => state.searchHistory

然后在suggest里面点击的时候。会触发vuex状态的改变。 
suggest组件在clickitem的时候。向外触发一个事件

this.$emit(‘select‘) 

在父组件里面去监控这select方法,然后触发savesearch的事件

@search="saveSearch" 

这里需要设置一个action,对mutation做一个封装。

export const saveSearchHistory = function ({commit}, query) {
  缓存localStorage
}

然而,这里还有一个需求,就是不止需要改变state的数据,还要同时去把数据存储到localStorage中/ 
这时候,需要去封装一个cache的js,里面写关于localstorage的一些逻辑。 
这里借助了一个插件:good-storage来实现:

import storage from ‘good-storage‘

// 每一个存储都要定义个一个key
const SEARCH_KEY = ‘__search__‘
const SEARCH_MAX_LENGTH = 15
// 最大值15

// 封装插入数组的方法
function insertArray (arr, val, compare, maxLen) {
  // (存储的数组,存储的值,比较函数:用来比较插入的值是否存在于当前数组,最大值)
  const index = arr.findIndex(compare)
  // 查找当前数组是否有某一个元素
  if (index === 0) {
    // 如果已经有,并且是第一个,什么都不做
    return
  }
  if (index > 0) {
    arr.splice(index, 1)
    // 如果有,不是第一个,先删除
  }
  arr.unshift(val)
  // 然后在数组最前面去插入这个值
  if (maxLen && maxLen < arr.length) {
    arr.pop()
  // 如果len大于最大值的话,就删除最后一个值
  }
}
// 操作和localStorage相关的一些逻辑
// 保存搜索结果
export function saveSearch (query) {
  // 接收一个query的参数,这个参数是当前要保存的query
  // 返回一个新数组
  let searches = storage.get(SEARCH_KEY, [])
  // 上面查看当前存储空间的情况,如果没有,就是一个空数组
  // 插入逻辑:最大15条,每条放前面,重复的数据把原来的删除
  insertArray(searches, query, (item) => {
    return item === query
    // searches里面的每一条和query比较
  }, SEARCH_MAX_LENGTH)
  storage.set(SEARCH_KEY, searches)
  // 在缓存里面保存searches
  return searches
  // 再吧这个searches返回出来,共vuex调用
}

然后就是在actions使用了。

export const saveSearchHistory = function ({commit}, query) {
  // 缓存localStorage
  commit(types.SET_SEARCH_HISTORY, saveSearch(query))
}

search里面调用actions

...mapActions([
      ‘saveSearchHistory‘
    ])
saveSearch () {
      // 保存搜索结果
      // 在改变vuex的同时还要把数据存到本地缓存
      this.saveSearchHistory(this.query)
    }

原文地址:https://www.cnblogs.com/catbrother/p/9181090.html

时间: 2024-08-30 08:14:57

vue慕课网音乐项目手记:48-搜索历史数据的处理的相关文章

vue慕课网音乐项目手记:52-搜索列表scroll的实现以及scroll底部距离的刷新

首先引入scroll组件,然后使用: <scroll class="shortcut" :data="shortcut" ref="shortcut"> 这里的data是computed计算的来的,因为scroll里面有两组数据: shortcut () { return this.hotKey.concat(this.searchHistory) // 当hotKey和History有一个发生变化的时候.computed就会重新计算

vue慕课网音乐项目手记:6-手写滚动轮播图(中)

active的样式 &.active width: 20px border-radius: 5px background: $color-text-ll 这里有一个问题就是betterscroll在1.0以后的是没有snapLoop的. 所以我安装了0.1.15版本 自动轮播如下 原文地址:https://www.cnblogs.com/catbrother/p/9181079.html

vue慕课网音乐项目手记:9-封装一个公用的scroll组件

知道disable是干什么的了,如果不加,scroll的高度会高于内容的高度. <template> <div ref="wrapper"> <slot></slot> </div> </template> <script> import BScroll from 'better-scroll' export default { props: { // probeType: 1 滚动的时候会派发scro

vue慕课网音乐项目手记:5-手写滚动轮播图(上)

在这一节,会封装一些公用的函数来添加classname,改变image的宽度. 具体如下: 首先:封装一个slider的组件 <template> <div class="slider" ref="slider"> <div class="slider-group" ref="sliderGroup"> <slot></slot> </div> <d

vue慕课网音乐项目手记:30-音乐环形进度条的实现

环形进度条是基于svg实现的. <template> <div class="progress-circle"> <svg :width="radius" :height="radius" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg"> <!-- wi

vue慕课网音乐项目手记:50-搜索列表的点击删除、删除全部的交互事件

<li class="search-item" v-for="(item, index) in searches" :key="index" @click="selectItem(item)"> selectItem (item) { this.$emit('select', item) }, search组件里面调用: <search-list :searches="searchHistory&q

Vue 实现的音乐项目 music app 知识点总结分享

其他 此应用的全部数据来自 QQ音乐,利用 axios 结合 node.js 代理后端请求抓取 全局通用的应用级状态使用 vuex 集中管理 全局引入 fastclick 库,消除 click 移动浏览器 300ms 延迟 页面是响应式的,适配常见的移动端屏幕,采用 flex 布局 疑难总结 & 小技巧 关于 Vue 知识 & 使用技巧 v-html 可以转义字符,处理特定接口很有用 watch 对象可以观测 属性 的变化 像这种父组件传达子组件的参数通常都是在data()里面定义的,为什

2018年慕课网视频教程(vue、react,docker、python、java、Go语言)

如需下述哪一个课程,加QQ: 3475362830,非免费,几大洋,非诚勿扰! Go语言实战流媒体视频网站基于Golang协程实现流量统计系统Google资深工程师深度讲解Go语言 java深入微服务原理改造×××销售平台BAT大牛亲授 基于ElasticSearch的搜房网实战java企业级电商项目架构演进之路Tomcat集群与Redis分布式Spring Boot企业微信点餐系统Java开发企业级权限管理系统SSM到Spring Boot-从零开发校园商铺平台Spring Security开

夜空中最亮的星:慕课网新手学习指南_慕课手记

首先标题是为了凑够标准的十个字,如果你这会去数了一下然后想评论说不是十个字,那我佩服你的求知精神...进来的肯定不是看我瞎扯淡的,我们步入正题. 慕课网作为国内不能说是最大,但是起码口碑最好的一个IT学习的网站,受到了很多人的欢迎,但是在推荐给朋友的过程中,我就发现了一些问题,那就是纯小白根本不知道怎么开始学习.这里我要说一下什么叫做纯小白,你以为不知道变量,命令提示符,HTTP协议,这些就是小白了吗?那你就错了,我今天要说的是连怎么设置IP地址,怎么设置百度为首页,连自己的操作系统是winxp