VUE移动端音乐APP学习【八】:播放器vuex的相关应用

在components目录下创建player=>player.vue组件

 

<template>
  <div class="player">
    <div class="normal-player">
      播放器
    </div>
    <div class="mini-player"></div>
  </div>
</template>

 

  • normal-player:展开的播放器

  • mini-player :收起后固定在底部的播放器

将播放器组件player.vue放在app.vue下,因为它不是任何一个路由相关的播放器,切换路由不会影响播放器的播放

<template>
  <div id="app">
    <m-header></m-header>
    <tab></tab>
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
    <player></player>
  </div>
</template>

运行后看到播放器默认展开,这并不是预期结果。

 

在player.vue中,从vuex取数据控制播放器的展开收起状态

<template>
  <div class="player" v-show="playlist.length>0">
    <div class="normal-player" v-show="fullScreen">
      播放器
    </div>
    <div class="mini-player" v-show="!fullScreen"></div>
  </div>
</template>

<script>
import { mapGetters } from 'vuex';

export default {
  name: 'player',
  computed: {
    ...mapGetters([
      'fullScreen',
      'playlist',
    ]),
  },
};
</script>

歌曲列表使用的是song-list组件开发。在song-list.vue添加点击事件,在methods中实现这个方法,它只派发该事件,告诉父组件music-list.vue:子组件song-list被点击了,以及点击的元素和索引是什么。

 

<li @click="selectItem(song,index)" v-for="(song,index) in songs" class="item" :key="song.id">


 methods: {
    selectItem(item, index) {
      this.$emit('select', item, index);
    },
    ...
  },

 

在music-list组件中可以监听到该事件,当歌曲被点击的时候,需要设置播放整个歌单列表,playlist和sequenceList,其次根据点击的索引,设置currentIndex,再次设置playerstate,还有默认展开大的播放器fullScreen,设置这些数据实际上需要提交很多次mutations,如果在一个动作中多次修改mutations,往往要使用actions进行一次封装

 

import * as types from './mutation-types';
// 选择播放
export const selectPlay = function ({ commit, state }, { list, index }) {
  commit(types.SET_SEQUENCE_LIST, list);
  commit(types.SET_PLAYLIST, list);
  commit(types.SET_CURRENT_INDEX, index);
  commit(types.SET_FULL_SCREEN, true);
  commit(types.SET_PLAYING_STATE, true);
};

 

在music-list中使用mapActions将actions中的selectPlay函数映射到music-list组件methods对象中,然后在selectItem函数中调用selectPlay就可以提交多个mutation
    selectItem(item, index) {
      this.selectPlay({
        list: this.songs,
        index,
      });
    },
    ...mapActions([
      'selectPlay',
    ]),

运行效果:

 

posted @ 2021-04-06 14:57  小风车吱呀转  阅读(107)  评论(0编辑  收藏  举报