"dependencies": { "axios": "^0.18.0", "fastclick": "^1.0.6", "jsonp": "^0.2.1", "vue": "^2.5.2", "vue-awesome-swiper": "^3.1.3", "vue-router": "^3.0.1" },
1) vue-cli脚手架安装css
vue init webpack my-project
2) 配置meta标签html
<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
3) 解决移动端300ms延迟前端
//main.js import FastClick from 'fastclick' FastClick.attach(document.body)
4) 解决抓取接口的跨域问题
(没用原视频讲的jsonp方法)
参考文章:
https://blog.csdn.net/u012369...
https://blog.csdn.net/fabulou...vue
props: { items: { type: Array, default () { return [] } } }
<keep-alive> <router-view/> </keep-alive>
了解更多<keep-alive>: https://segmentfault.com/a/11...node
new Promise((resolve, reject) => { jsonp(url, option, (err, data) => { if (!err) { console.log(data); reslove(data) } else { console.error(err) reject(reject) } }) })
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data) function param (data) { let url = '' for (let i in data) { let value = data[i] !== undefined ? data[i] : '' url += `&${i}=${encodeURIComponent(value)}` } return url ? url.substring(1) : '' }
encodeURI()是对整个URL编码的函数,对特殊含义的符号"; / ? : @ & = + $ , #"不进行编码,解码函数decodeURI()。
encodeURIComponent()能编码"; / ? : @ & = + $ , #"这些特殊字符,解码函数decodeURIComponent()。
例:webpack
encodeURIComponent('{ "ct": 24 }') // 结果: "%7B%20%22ct%22%3A%2024%20%7D" encodeURI('{ "ct": 24 }') //结果:"%7B%20%22ct%22:%2024%20%7D"
参考文章: https://www.cnblogs.com/huzi0...ios
网上一搜一大堆内容,我用的module,就是每次写$style.className好头疼。。。git
display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
见我提的问题:https://segmentfault.com/q/10...
参考文章:https://www.cnblogs.com/freel...github
slice: 返回为新数组,原数组没有变化 var arr= [1,2,3,4]; var sliceArr= arr.slice(1,2); 此时arr仍是[1,2,3,4],sliceArr是[2]
splice: 返回被删除的项目,原数组发生变化 arrayObject.splice(index,howmany,item1,.....,itemX), 第一个参数是删除的index,第二个是数量,第三个和以后的是插入的内容,从第一个参数开始的位置插入。 var arr=[1,2,3,4,5,6]; arr.splice(1,2,7); 返回[2,3],arr是[1,7,4,5,6]
split: 把一个字符串分割成字符串数组 var str="1-2-3-4"; var spliteStr = str.split("-"); 返回数组[1,2,3,4]
我的理解:
须要组件有高度时才能轮播,即须要先有元素渲染
参考文章:https://blog.csdn.net/m0_3788...web
//在slider组件上加 v-if="items.length"功能可实现,其中items是轮播图数组数据。 <slider :swiperOption=options :items="bannerList" v-if="items.length"/>
鼠标翻页后,自动轮播又无效??
未解决
将favicon.icon放在根目录下(与 index.html同级)
我用的vue-cli,须要配置webpack.dev.conf.js:
new HtmlWebpackPlugin({ filename: 'index.html', template: 'index.html', inject: true, favicon: './favicon.ico' })
参考文章:https://www.jianshu.com/p/877...
实现功能: 点击基础组件的某个元素进行二级路由跳转
不在基础组件中作业务逻辑
//base.vue <template> <div> <h2 @click="recommendMore">更多推荐</h2> </div> </template> methods: { recommendMore () { this.$emit('recomMore') } }
//home.vue <base @recomMore="recomMore"/> methods: { recomMore () { this.$router.push({ path: '/recommend/recommendMore' }) } }
未解决
如vuex文档所,它就像眼镜,自会知道何时须要它。
所要实现的功能:
点击一组列表,跳转到每一个列表的详情页,
而详情的数据获取依赖于被点击的某个列表的id,
此时须要将id传到 路由跳转到的二级页面。
在click 每一个item时,除了实现跳转功能,还要实现将数据传到跳转页面
clickItem(item) { this.$router.push({ path: `/recommend/${item.content_id}` }) //在这里调详情接口数据能得到到,可是传不到跳转页面 需vuex?嗯,需vuex!! 直接将所需参数传过去,在详情页调用详情接口。 this.setRecommend(item)
(这里卡了好长时间,一直在找数据传递的方法,没思考到要用vuex)
Error parsing D:\project\myworkplace\vue-music\my-music\node_modules\_node-libs-browser@2.1.0@node-libs-browser\node_modules\crypto-browserify\package.json
打开报错文件目录下的package.json为空,上次打开还能够正常运行,不知道报错缘由。
由于是调用的qq音乐的接口,估计跟接口发生了变更有关?
个人思路:
注释掉相关接口,重启 (无效)
删除node_modules,再从新安装一遍(代价太大,想了想而后放弃)
缘由:
与原依赖对比,package.json不该该是空,应该是有内容的。怀疑是本身午休时不注意碰到按键删除了。。。。
将package.json内容恢复后项目正常运行。
crypto-browserify地址:https://github.com/crypto-bro...
未解决
未解决
缘由:
jsonp自身增长了一个参数: callback=__jp1, 这个参数不是我想要的,与后台协议好的参数是: jsonCallback: jsonCallback
因此须要自定义callback的名和值,即设置option:
const option = { param: 'jsonCallback', //名 prefix: 'jsonCallback' //值 }
可是,这样设置还不够,设置的值会本身在后边加数字,会出现jsonCallback0 jsonCallback1。。。等状况。
因此还须要最后一步,修改jsonp源码index.js以下代码:
// var id = opts.name || (prefix + (count++)); //源代码 var id = opts.name || prefix;//修改后代码,禁止参数自增
有一组id,当id= 2时跳转到mv页面,其余时候跳转到song页面。
个人问题: 虽然在点击调转时作了判断,连接也跳到了nv页面,可是渲染的倒是song的页面
//router下的index.js { path: '/home', name: 'Home', component: Home, children: [ { path: ':id', component: SongDetail }, { path: 'mv', component: MvDetail }] } //home.vue下的click点击跳转方法 click(item) { if (item.id === 2) { this.$router.push({ path: '/home/mv' }) } else { this.$router.push({ path: `/home/${item.id}` }) } },
解决方法:将router index.js路由交换,将mv放上边,以下:
{ path: '/home', name: 'Home', component: Home, children: [{ path: 'mv', component: MvDetail }, { path: ':id', component: SongDetail }] }
未解决
actions写错:
//错误写法 import mutationTypes from './mutation-types' export const clickPlayerItem = function ({ commit }, { playList, index }) { commit(mutationTypes.SET_PLAYLIST, playList) commit(mutationTypes.playIndex, index) //错误在这里,将SET_PLAYINDEX 写成了 playIndex,致使报错 } //正确写法 export const clickPlayerItem = function ({ commit}, { playList, index }) { commit(mutationTypes.SET_PLAYLIST, playList) commit(mutationTypes.SET_PLAYINDEX, index) }
showBigPlayer 是从vuex中获取,改变时不能直接像以下代码这样改变:
back () { this.showBigPlayer = false }
应该经过mapMutations进行值的改变,正确代码以下:
back () { this.setShowBigPlayer(false) }, ...mapMutations({ setShowBigPlayer: 'SET_SHOW_BINGPLAYER' })