从零开始利用vue-cli搭建简单音乐网站(三)
1、利用router-link在组件之间传递数据

如上图,MainPage.vue中主要有8个推荐曲目数据,主要实现方式是建立好主页面模板,然后用v-for循环获取返回的music对象,然后分别绑定曲目,代码如下:

ul作为承载8个曲目的模板,利用v-for="music in musics"遍历musics数组,依次生成li标签填充页面。musics为一个对象数组,其内容是8个对象,具体实现如下图所示:

在dev-server.js中先把请求到的json函数(appData)复制一份给musicCopy数组,因为8首曲目为随机生成的,所以为了不生成重复的曲目,将使用复制数组进行判断。判断方法主要思路是检查每次随机生成的曲目所对应的copy数组中的值是否为undefined,否的话表示之前没有生成过该曲目,把曲目赋值给music数组,并且把copy数组的相应位置值赋值为undefined。是的话表示已经生成过该曲目,因此i-1再次随机生成曲目。
上面MainPage.vue的代码图中还有router-link标签,可以看到其to属性是一个对象,主要实现了向其跳转的组件传递数值功能。path表示跳转路径,query把music对象作为属性传递了过去,这里跳转的地址为"/PlayMusic",在PlayMusic.vue中定义music对象数据,并且在created阶段使用“this.music = this.$route.query.music”获取music对象,赋值给自身的music对象然后绑定在页面。
2、在播放页面显示歌词
最终效果如下:

因为歌词数据庞大,无法通过json模拟,所以在没有后台以及数据库的情况下,我的解决办法是将歌词保存为txt文件,通过ajax发送请求读取,实现代码如下:

上图是在PlayMusic.vue的created阶段,也就是用户点击MainPage.vue页面的歌曲封面时候跳转进来。这里先获取了music对象:“this.music = this.$route.query.music”,然后获取lyric的路径,json数据中的lyric是歌词txt文件存放的路径,如"lyric":"/static/data/lyric/一番の宝物 (Original Version).txt".然后新建了XMLHttpRequest对象(这里没有做兼容)并且发送ajax请求,把返回值xhr.responseText赋值给lyr,因为返回值是一个字符串,所以显示在页面上不会有换行效果。这里用正则表达式匹配所有的换行符,将其替换为HTML能识别的<br />换行,最后赋值给歌词div。这里还要注意一点就是txt文件保存为UTF-8编码,不然会乱码。
下一篇将要实现的是歌曲的播放功能。
从零开始利用vue-cli搭建简单音乐网站(三)的更多相关文章
- 从零开始利用vue-cli搭建简单音乐网站(一)
最近在学习vue框架,练习了一些例子之后,想着搭建一个vue项目,了解到官方有提供一个vue-cli工具来搭建项目脚手架,尝试了一下,写下博客来记录一下. 一.工具环境 1.node.js 6.10. ...
- 从零开始利用vue-cli搭建简单音乐网站(七)
这几天完成了歌曲收藏功能,先看最后效果: 新注册用户:“newuser”,进入“我的音乐界面如下所示” 点击新建歌单,输入:“新歌单”,确认,如下: 目前还没有歌曲,打开音乐界面,点击收藏功能,如下, ...
- 从零开始利用vue-cli搭建简单音乐网站(八)
这是完成了预想中的最后两个功能:歌曲评论以及歌曲搜索. 1.评论效果: 用户点击评论按钮,评论框获取焦点. 输入之后点击提交,下方显示评论,用户名称以及日期.相应的用户也可以删除自己评论. 当然只能删 ...
- 从零开始利用vue-cli搭建简单音乐网站(六)
上一篇遗漏了一个简单的效果没写,见下图: 主页面点击热门推荐和更多之后跳转到歌曲列表页面,现在的页面只是简单的把所有歌曲列出来,没有进行排序.实现起来也很简单,在MainPage的两个链接上添加: & ...
- 从零开始利用vue-cli搭建简单音乐网站(五)
上一篇文章讲到的是如何利用mongoose从数据库读取数据然后更新页面,接下来要实现的就是用户注册登录功能,这个功能涉及到的东西太多了,今天只实现了登录功能,登陆之后更新导航条界面,最后效果如下: 登 ...
- 从零开始利用vue-cli搭建简单音乐网站(二)
1.利用vue-router实现页面跳转 程序可以正常运行之后,下面我们需要配置路由实现页面的局部刷新,这一功能将用来实现网站页面的跳转. 打开程序目录,进入"src\router\inde ...
- 从零开始利用vue-cli搭建简单音乐网站(四)
上一篇文章中说到这一篇博客会实现音乐播放功能,只是令我意外的是,如果利用h5的audio标签,几行代码就实现了......先来看一下最终效果吧. 这里直接用了audio标签,样式没有怎么管,能获得音乐 ...
- Django搭建博客网站(三)
Django搭建博客网站(三) 第三篇主要记录view层的逻辑和template. Django搭建博客网站(一) Django搭建博客网站(二) 结构 网站结构决定我要实现什么view. 我主要要用 ...
- vue cli搭建项目及文件引入
cli搭建方法:需安装nodejs先 1.npm install -g cnpm --registry=https://registry.npm.taobao.org //安装cnpm,用cnpm下载 ...
随机推荐
- [SHOI 2017] 组合数问题
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4870 [算法] 回顾组合数的定义 : C(N , M)表示将N个小球放入M个盒子里的 ...
- Tomcat 安装之后,双击Tomcat.exe,无法运行成功,怎么办?
Log形式多种多样,有的时候跟下面一样: 首先的解决方案就是:修改server.xml中所有的端口,因为不只8080端口可能被占用! 我在出问题的时候就修改8080端口.结果死活运行不了,纠结一些时间 ...
- 双重检查锁实现单例(java)
单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战.他们所面对的其中一个关键挑战是,怎样确保单例类的行为是单例?也就是说,无论任何原因,如何防止单例类有多个实例.在整个应用生命周期中 ...
- redis 操作使用
/*1.Connection*/ $redis = new Redis(); $redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超 ...
- SparseArray浅析
HashMap是java里比较常用的一个集合类,我们一般用来缓存一些处理后的结果.但当你做一个Android项目时,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...
- 常用模块 re模块与正则表达式
re模块 正则: 正则就是用一些具有特殊含义的符号组合到一起(称之为正则表达式)来描述字符或字符串的方法.或者说:正则就是用描述一类事物的规则.(在python中) 它内嵌在python中,并通过re ...
- UVa 12333 Revenge of Fibonacci (字典树+大数)
题意:给定一个长度小于40的序列,问你那是Fib数列的哪一项的前缀. 析:首先用大数把Fib数列的前100000-1项算出来,注意,一定不能是100000,要不然会WA的,然后每个数取前40位,不足4 ...
- 简易DIV垂直居中阴影层笼罩JS实现
$(document).ready(init); function init() { var h = $(window).height(); var w = $(window).width(); /* ...
- E20180518-hm
priority n. 优先,优先权; (时间,序上的) 先,前; 优先考虑的事; [数] 优先次序;
- vijosP1286座位安排(状压DP)
传送门 题意 计算\(C_{n*m}^k/可行方案数\) 分析 定义dp[i][j][k]为第i行用过人数为j个且第i行状态为k的方案数 转移方程:dp[i][j][k]=Σdp[i-1][j-num ...