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"
            @select="addSearchValue"
></search-list>
删除一条的实现

search-list中向外部传一个事件。

deleteOne (item) {
      this.$emit(‘deleteOne‘, item)
    }

search组件监听这个事件:

<search-list
                      :searches="searchHistory"
                      @selectItem="addSearchValue"
                      @deleteOne="deleteOne"
          ></search-list>

这里的删除需要改变两部分 
1:state里的数据 
2:localStorage的数据

所以还需要在cache里面封装方法:

// 下面是deleteSearchOne的实现
export function deleteSearch (query) {
  let searches = storage.get(SEARCH_KEY, [])
  // 上面查看当前存储空间的情况,如果没有,就是一个空数组
  // 删除逻辑:最大15条,每条放前面,重复的数据把原来的删除
  deleteFromArray(searches, (item) => {
    return item === query
  })
  storage.set(SEARCH_KEY, searches)
  // 在缓存里面保存searches
  return searches
  // 再把这个searches返回出来,共vuex调用
}
// 封装一个删除的方法

function deleteFromArray (arr, compare) {
  const index = arr.findIndex(compare)
  if (index > -1) {
    arr.splice(index, 1)
  }
}

然后在action里面调用deleteSearchOne

export const deleteSearchHistory = function ({commit}, query) {
  commit(types.SET_SEARCH_HISTORY, deleteSearch(query))
}

这样就可以了。然后在search组件里面使用action

...mapActions([
      ‘saveSearchHistory‘,
      ‘deleteSearchHistory‘
    ])
deleteOne (item) {
      this.deleteSearchHistory(item)
    },

这样实现点击删除一个条目

删除全部

定义点击事件

<span class="clear" @click="deleteAll">
              <i class="icon-clear"></i>
            </span>

点击事件通过action来修改state

deleteAll () {
      this.clearSearchHistory()
    },
...mapActions([
      ‘saveSearchHistory‘,
      ‘deleteSearchHistory‘,
      ‘clearSearchHistory‘
    ])

action代码如下:

export const clearSearchHistory = function ({commit}) {
  commit(types.SET_SEARCH_HISTORY, clearSearch())
}

因为这里要同时清除所有的state的数据还有localStorage的数据。所以还在在catch’里面定义clearSearch的方法:

export function clearSearch () {
  storage.remove(SEARCH_KEY)
  // 删除localhistory
  return []
  // 返回空数组
}

如果方法只是调用action,并且参数一样的话,那么可以直接使用action映射的方法。

<search-list @deleteOne="deleteSearchHistory"></search-list>
<span class="clear" @click="clearSearchHistory">

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

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

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

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 co

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慕课网音乐项目手记: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 实现的音乐项目 music app 知识点总结分享

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

关于开源项目侧边栏字母搜索列表ListViewFilter的bug解决办法

很多人用过ListViewFilter这个开源列表,做得确实相当不错,但是在使用的过程中好像有点bug,当点击右侧的字母时,总是会触发列表中的某一项的点击事件,这里就给出这个bug的解决办法,主要是IndexBarView.java和PinnedHeaderListView.java这两个文件: 1. PinnedHeaderListView.java public class PinnedHeaderListView extends ListView implements IIndexBarF

【慕课网实战】Spark Streaming实时流处理项目实战笔记二十之铭文升级版

铭文一级: Spring Boot整合Echarts动态获取HBase的数据1) 动态的传递进去当天的时间 a) 在代码中写死 b) 让你查询昨天的.前天的咋办? 在页面中放一个时间插件(jQuery插件),默认只取当天的数据2) 自动刷新展示图 每隔多久发送一个请求去刷新当前的数据供展示 统计慕课网当天实战课程从搜索引擎过来的点击量 数据已经在HBase中有的 自己通过Echarts整合Spring Boot方式自己来实现 铭文二级: 在Spring Boot项目pom.xml下引入<repo