• 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)
        }
  • 相关阅读:
    eclipse中开发android程序时,打开layout配置文件自动关闭的问题
    成功用WAP登陆ZBlog发表文章
    java环境变量配置
    Eclipse快捷键大全
    Android SDK 2.2 开发环境搭建
    用EnterpriseLibrary来自动管理与数据库的连接
    一个普通网站发展成大型网站过程中的架构演变史
    有关Silverlight TabControl组件的研究
    有关Silverlight浮动窗体组件的研究
    强大的DataGrid组件[9]_自定义头模板
  • 原文地址:https://www.cnblogs.com/catbrother/p/9181090.html
Copyright © 2020-2023  润新知