vue10----axios拦截器、js-base64歌词解码、lyric-parser解析歌词、watch的用法:当data中的值发生变化时触发、播放和暂停歌词,点击进度条跳转到对应歌词
### axios Interceptors(拦截器)(P-lyric.vue)
类似于node中的中间件,在请求和响应之间做一次处理。
axios从接收到数据请求到then之间的过程中,拦截器进行拦截。正常的axios请求返回的response对象里有:data、status、statusText、headers、config、request、__propto__,可以通过响应拦截,只返回data。请求拦截可以对config中的参数进行修改,这里对url进行追加参数。
步骤:
①在utils文件夹下新建axios.js:
import axios from "axios"; // 请求拦截器 axios.interceptors.request.use(function (config) { console.log("请求拦截器",config) // config.url=`/lyric/music/api/lyric?g_tk=1928093487&inCharset=utf-8&outCharset=utf-8¬ice=0&format=json&songmid=001Qu4I30eVFYb&platform=yqq&hostUin=0&needNewCode=0&categoryId=10000000&pcachetime=1581573879680&name=wql&age=24`;// 增加&name=wql&age=24 return config; }, function (error) { return Promise.reject(error); }); // 响应拦截器 axios.interceptors.response.use(function (response) { console.log("响应拦截器", response) return response.data;// 这里return出去的是 .then() 中的数据,这里只要data }, function (error) { return Promise.reject(error); }); export default axios;
②main.js中引入带有拦截器的axios:
import Axios from "axios";
替换为
import Axios from "./utils/axios.js";
### js-base64歌词解码(P-lyric.vue)
①安装插件:
npm install js-base64
②引入:
import {Base64} from "js-base64";
③解码:Base64.decode()方法
this.$axios.get(url,()=>{ }).then((data)=>{ let lyric=Base64.decode(data.lyric); console.log(lyric) });
### lyric-parser解析歌词(P-lyric.vue)
①安装插件:
npm install js-base64
②引入:
import LyricParser from "lyric-parser";
③实例化:
let lyric=Base64.decode(data.lyric); this.lyricObj=new LyricParser(lyric,(obj)=>{ this.lyric=obj.txt; });
④API
play() 播放歌词
stop() 暂停歌词
seek(startTime) 歌词跳转
togglePlay() 切换播放/暂停状态
### watch的用法:当data中的值发生变化时触发(P-lyric.vue)
当前组件props属性接收到父组件传来的paused和current时,用watch处理,当paused和current的值发生变化时,触发watch监听,自动执行。
props:["paused","current"], watch: { paused(newValue,oldValue){ if(newValue){ this.lyricObj.togglePlay(); }else{ this.lyricObj.togglePlay(); } }, current(newValue,oldValue){ console.log(newValue) } }
当前组件接收到vuex中的传来的currentSong时,通过watch处理,当currentSong发生变化时,触发watch监听,自动执行initLyricData()。
import {mapGetters} from "vuex"; computed: { ...mapGetters(["currentSong"]) }, watch: { currentSong(newValue,oldValue){ this.initLyricData(newValue.musicData.songmid); } }
### 播放和暂停歌词,点击进度条跳转到对应歌词(P-lyric.vue)
①Player.vue中将playing和current传到P-lyric.vue中:
<PLyric :playing="playing" :current="current"></PLyric>
②P-lyric.vue中通过props接收,通过watch监听处理接收到的playing和current,与歌曲播放同步:(watch特点:当值发生变化时自动触发)
props:["playing","current"], watch: { playing(newValue,oldValue){ if(newValue){ this.lyricObj.togglePlay(); }else{ this.lyricObj.togglePlay(); } }, current(newValue,oldValue){ let seekTime=newValue*1000; this.lyricObj.seek(seekTime); } }
分类:
vue
« 上一篇: vue09----vuex辅助函数、Detail.vue跳转Player.vue、封装mutations中的函数名、utils工具的使用、&符号、audio标签的timeupdate事件和ended事件、点击play按钮实现播放和暂停,同时img对应旋转或暂停旋转、上一曲(prev)和下一曲(next)、props传值以对象形式对象接收、watch监听控制进度条的宽度、点击滚动条控制播放时间
» 下一篇: vue11----前端优化、路由懒加载(异步组件)、keep-alive、localStorage二次封装、vue-lazyload图片懒加载、mint-ui、封装加载loading条、axios请求x-www格式的数据、nginx代理、路由守卫、mint-ui实现下拉刷新,上拉加载更多、自己封装过哪些组件和模块
» 下一篇: vue11----前端优化、路由懒加载(异步组件)、keep-alive、localStorage二次封装、vue-lazyload图片懒加载、mint-ui、封装加载loading条、axios请求x-www格式的数据、nginx代理、路由守卫、mint-ui实现下拉刷新,上拉加载更多、自己封装过哪些组件和模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结