網易雲實戰專案(9)
專案發現模組
先在原有的基礎上新建幾個vue專案,views中一個listView,components中listViewTop.vue和playList.vue
這裡的listView算是listViewTop和playList 的父級
歌單詳情頁面的實現效果和之前的大同小異
仍然是在router/index.js中配置一個獲取資料的函式:
然後在父檔案listView中引用函式和兩個子檔案
使用setup函式組合api:
這一步和前面的做法相似,不過多贅述
後面各個元件頁面效果的實現就只需要props獲得父元件的資料然後渲染到頁面的指定位置並進行排版即可
我們在子元件中獲取了父元件中的playlist,所以在排版頁面上只需要去觀察playlist中的各項資料,選擇合適的資料名稱渲染即可
歌單詳情模組
元件之間共享的資料,都要使用的資料放到狀態管理庫store中
資料存放在store資料夾下的index.js中
在state中建立一個playlist音樂播放列表,預設播放playCurrentIndex:0下標為0(第一條資料)
在mutations中定義一個函式來修改state中的playlist音樂播放列表資料
下面要將預設的歌曲列表改成當前歌單的歌曲列表
要在listView中執行這個修改函式
當listView獲取到歌單的資料時,觸發這個修改函式,將預設歌單的資料修改為當前歌單的資料
全域性音樂播放元件
定義一個show=false(意為預設不顯示),給playMusci元件繫結這個v-show=show,在歌曲小圓標頭像上繫結click=show=!show實現點選歌曲圖示顯示playMusic元件
已經可以點擊出來playMusic,現在定義一個返回按鈕
實現思路:
定義一個自定義函式back:show=!show,然後在playMusic頁面中觸發這個自定義函式
在返回按鈕上@click=”$emit(‘back’)”觸發back自定義函式並執行
將父元件中的歌曲詳情資料,暫停播放按鈕,暫停播放函式等傳輸到子元件中,使用props接受
<div class="bg" :style="{backgroundImage:`url(${playDetail.al.picUrl})`}"></div>
加上背景圖
加上底部的六個按鈕,並給播放和暫停按鈕呼叫play和paused函式
歌曲詳情模組
獲取歌詞:
歌詞是元件之間共享的資料
在store/index.js中定義
在state中定義一個lyric:””空來接收當前播放歌曲的歌詞
在mutations中定義一個新的函式setLyric來修改歌詞的資料
在actions中定義一個reqLyric獲取歌詞的函式
由於用到了await非同步處理,所以加上了async,這裡的let就是獲取到的歌詞資料
獲取歌詞函式的呼叫應在playController中的mounted生命週期函式中呼叫.
由於是非同步actions中的方法,所以這裡使用ispatch觸發
淺淺截個圖來直接說明兩者的不同 以及觸發方式
這時我們的當前歌曲的歌詞已經儲存在了state.lyric中,直接在前端歌詞頁面引入即可
<p>{{$store.state.lyric}}</p>
一個動態class繫結
播放時 暫停時
這時通過一個動態class的繫結,在css中修改transform樣式達到動畫效果
使用一個:class=”active=!paused”,在css中定義active的transform樣式
Paused就是之前寫好的播放與暫停的判斷函式
實現點選按鈕切換上一首和下一首
在按鈕頁面定義一個goplay(num)函式,在兩個按鈕上新增click事件並呼叫這個goplay,上一首是goplay(-1),下一首是goplay(+1)
然後從store中獲取當前播放歌曲列表playlist與播放歌曲下標playCurrentIndex
記得import mapState from vuex
然後在methods函式中
Let index=this.playCurrentIndex+num,index就會獲取當前播放歌曲下標playCurrentIndex上一首(-1)或下一首(+1)的下標,使用commit將index的值傳到setPlayIndex函式中來修改當前播放音樂下標.
單是這樣還不夠
,我們還需要一個if判斷,當歌曲下標為第一首時點選上一首會切換到當前列表的最後一首,反之同理:
這樣歌曲就能在當前列表中上下點選切換了
歌曲搜尋模組
在view中新建一個Search.vue並引入
1、封裝搜尋歌曲的api /search?keywords=
2、給input新增鍵盤按下事件 @keydown.enter="searchSong"
3、編寫searchSong函式,傳送ajax請求,傳遞引數searchKeyword
4、接收ajax返回的歌曲列表,將它v-for迴圈渲染到頁面上
使用者登入驗證與登入狀態維持
使用者登入頁面和個人中心頁面
在store/index.js中新增一個判斷是否登陸的條件
在router/index.js中引入store,然後在router中對store中的資料進行判斷
個人中心模組以及退出登入
獲取登入使用者資訊
1、封裝獲取使用者詳情的api介面
2、呼叫獲取使用者詳情介面,接收到使用者詳情,將使用者詳情儲存到store.state.user.userDetail中
把資料存到本地儲存中
3、 在個人中心頁面訪問使用者詳情的使用者名稱
4,退出賬號操作
單擊退出按鈕,清空是否登陸判斷條件,清空本地儲存登入使用者資訊,回到首頁
修改store中的資料,需要在store中mutations中新建一個方法
在退出按鈕上新增一個cilck事件=’logout’,在methods中定義這個logout函式
需要給img的盒子上一個v-if判斷:
v-if="$store.state.user.userDetail.profile"