nicenote/source/_posts/vue高仿qq音乐官网.md
2018-05-26 17:58:20 +08:00

124 lines
4.9 KiB
Markdown
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: vue高仿qq音乐官网
date: 2017-06-15 18:36:30
tags: [vue, vuex, vue-router]
categories: web项目
---
一直想做一个vue项目 然后呢 我就做了
## 效果预览
部分地方不全部根据原版也有自由发挥的目前功能模块比较简陋如果显示不完整请下载以下api文件并打开
> [网易云音乐API](https://github.com/Binaryify/NeteaseCloudMusicApi)
> 项目地址:[github](https://github.com/j710328466/vue-qqmusic)
> 预览地址:[demo](http://182.254.147.168:8564/#/)
## Build Setup
```js
# install dependencies
cnpm i
(可以用cnpm或yarn更方便快捷你值得拥有)
# serve with hot reload at localhost:8564
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
# 网易云API部署 listen localhost:3000
npm run start
```
## 技术栈
* vue(数据绑定)
* vue-router
* vuex(管理组件状态,实现组件通信)
* webpack(打包工具)
* scss原来想用stylus,回头看看我都快写完了...
* axios我等下要重点讲这****
* 组件库: element-UI(本来想用muse-UI,感觉那个更cool下次吧..)
* API: 网易云音乐API(仿qq音乐我用网易云音乐的东西你怕不怕...)
## 核心功能组件的实现
### 搜索功能
![](https://ooo.0o0.ooo/2017/06/14/594135198d975.gif)
### 播放功能
![](https://ooo.0o0.ooo/2017/06/14/5941364de751e.gif)
   (播放页面正在完善中,样式只是大概,待细化...)
### 跳转功能
![](https://ooo.0o0.ooo/2017/06/14/59415a8cd0df7.gif)
(目前子目录只开通歌手列表)
## 自己挖的坑,自己埋
### vuex的模块应用
* 一开始我并没有使用vuex因为我觉得目前这个项目比较小并不需要它来管理数据毕竟vuex针对大项目来说确实很好用但是后来考虑到如果后期该项目我还要 维护数据量一大还是要重新分类数据所以中途某些地方插入了vuex的使用这就很大一部分影响了项目进行的进度。目前只用到action和state
### qq音乐的轮播图
* 不用说qq音乐这个网站的页面我是真的挺喜欢不光是他的设计页面的布局也很美观在控制台调试的时候可以看看它的结构非常有层次而富有美感即使加上 一层margin,padding也不会有违和感。这就造就了它的轮播图结构比较麻烦不是说做不出来因为这是第一次上传的项目我想先将大概的结构完善一下后期再 维护所以我就选用了element-UI里面的跑马灯式轮播图组件大体来说除了部分瑕疵以外还是高度还原了原版轮播图的。
### axios后端数据获取时产生的跨域问题
* 重点来了这个是我在该项目中花了最多时间的地方相信很多同学使用axios都碰到过我这个问题目前我这里使用了三种方法处理该问题请大家针对自己的项目问题对号入座
* 跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。
#### ①. 针对本地相同端口服务器之间的跨域
* 这是我刚开始碰到问题时使用的第一种这个时候你只需要找到build文件中的dev-server找到引用express的位置给它加上一个头文件
```js
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Credentials", true)
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers", "X-Requested-With")
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8")
next()
})
```
> ![](https://ooo.0o0.ooo/2017/06/14/594140894d162.jpg)
```
* 然后它就会报错~,具体原因是你同一个端口申请相同端口的东西,不好意思,那不叫跨域...
#### ②. 针对本地不同端口的服务器之间的跨域
* 就是将上面的头文件放在当前项目申请的服务器的那个api中。
#### ③. 针对本地服务器对域名服务器访问的跨域问题
* 找到当前项目congfig文件夹下index.js文件然后在文件中将proxyTable内容改为
```js
proxyTable: {
'/api': {
target: '[1]',
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}
}
```
> 就是你当前想访问的api地址项目中访问的时候就只要用/api做反向代理即可
## 终于
* 这是我第一个用vue撸的项目可能功能有点简陋很多地方有待提高不过这次实践让我对组件化的理解有了一定的提升后期会继续加入其它功能模块的文中有用词不对的地方欢迎大家指出项目有什么bug也希望大家多多提issue
* 如果对你有帮助给个star吧