在看慕课网的vue.js高级课程音乐app时,发现由于vue-cli已由2变为3,better-scroll也因为版本更新的原因,如果照着源代码,会出现很多小问题
1.框架搭建
搭项目框架时,因为vue-cli3如果自己选择了babel,stylus等,最后都是会构建好的,所以不需要跟着教学视频再安装相关loader或插件。
一定要根据自己的情况,视情况而定,不要盲目跟着老师安装东西
2.写slider组件时发现出现很多的小问题,比如不能轮播,currentPageIndex值不对,后来发现因为版本的更新很多小细节进行了修改
如:loop的初始化,轮询时pageIndex不需要+1,this.slider.goToPage()可以用this.slider.next()代替,click: false时,a标签反倒不能跳转等
以下为相关代码:
_setSliderWidth(isResize) { this.children = this.$refs.sliderGroup.children let width = 0 let sliderWidth = this.$refs.slider.clientWidth for (let i = 0; i < this.children.length; i++) { let child = this.children[i] addClass(child, 'slider-item') child.style.width = sliderWidth + 'px' width += sliderWidth } if (this.loop && !isResize) { width += 2 * sliderWidth } this.$refs.sliderGroup.style.width = width + 'px' }, _initDots() { this.dots = new Array(this.children.length) }, _initSlider() { this.slider = new BScroll(this.$refs.slider, { scrollX: true, scrollY: false, momentum: false, snap: { loop: this.loop, threshold: 0.3 }, click: true }) this.slider.on('scrollEnd', () => { let pageIndex = this.slider.getCurrentPage().pageX this.currentPageIndex = pageIndex if(this.autoPlay) { clearTimeout(this.timer) this._play() } }) }, _play() { this.timer = setTimeout(()=> { this.slider.next(); }, this.interval) }
3.在getDiscList接口获取数据时通过服务器代理进行referer伪造时,由于使用的是cli3所以并没有dev-serve.js
解决办法是在,vue.config.js中进行配置
代码如下
const path = require('path'); const express = require('express') const axios = require('axios') const app = express() const apiRoutes = express.Router() module.exports = { configureWebpack: { resolve: { alias: { 'common': path.join(__dirname, 'src/assets'), 'components': path.join(__dirname, 'src/components'), 'api': path.join(__dirname, 'src/api'), 'base': path.join(__dirname, 'src/base'), }, } }, devServer: { before(apiRoutes){ apiRoutes.get('/api/getDiscList',(req,res)=>{ const url = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg'; axios.get(url, { headers: { referer: 'https://c.y.qq.com/', host: 'c.y.qq.com' }, params: req.query }).then((response) => { res.json(response.data) }).catch((e) => { console.log(e) }) }); } } }