项目的目录结构:
api存放于后端请求相关的代码,包括ajax,jsonp请求;
common中存放通用性的资源,包括通用的字体文件和图片;
js stylus
router是与路由相关的文件
store是存放vuex相关的文件
main.js为入口文件,渲染App的一个vue文件
app.vue中是一个简单的界面,我们在这里import所有的样式文件,index.styl是引入所有样式的一个文件
1.main.js是函数的入口,引入styl文件
import 'babel-polyfill'
import Vue from 'vue'
import App from './App'
import router from './router'
import fastclick from 'fastclick'
import VueLazyload from 'vue-lazyload'
/* 引入样式 */
import 'common/stylus/index.styl'
fastclick.attach(document.body) // 取消300ms的延时
Vue.use(VueLazyload, {
loading: require('common/image/default.png')
})
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
render: h => h(App)
})
所以在App.vue中,模板的id为app,因为在main.js中,el:#app;,之后配置package.json和eslinc.js的相关配置
webpack.base.cong.js中可以配置别名
页面骨架开发部分
首先在index.html中,添加meta标签,回到package.json中添加相关依赖,fastclick解决移动端点击300ms延迟的问题,之后回到main,js中引入相关组件(之前在package.json中安装的),程序如上:
之后回到App.vue中,App.vue中包含两个组件,header和tab组件
2.编写m-header组件和tab组件,并在app.vue中引入组件
header.vue
Chicken Music
开发vuerouter+tab.vue组件
在router文件夹下的index.js文件中,配置路由,之前是在main.js中直接配置路由,现在将路由文件的配置单独写在router文件夹下的index.js文件中,很明显我们的vuerouter对应四个组件,推荐,歌手,排行和搜索;引入组件并编写router数组
import Vue from 'vue'
import Router from 'vue-router'
import Recommend from 'components/recommend/recommend.vue'
import Singer from 'components/singer/singer.vue'
import Rank from 'components/rank/rank.vue'
import Search from 'components/search/search.vue'
import SingerDetail from 'components/singer-detail/singer-detail.vue'
// 注册一下vue
Vue.use(Router)
// 配置路由
export default new Router({
routes: [
{
path: '/',
redirect: '/recommend'
},
{
path: '/recommend',
component: Recommend
},
{
path: '/singer',
component: Singer,
children: [
{
path: ':id',
component: SingerDetail
}
]
},
{
path: '/rank',
component: Rank
},
{
path: '/search',
component: Search
}
]
})
创建好Router之后,回到main.js,传入router,并将其添加到vue对象上
import router from './router'
new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
这个router就是我们在router-index.js中export的实例,之后再App.vue中将路由出口router-view挂在到tab组件的下方
我们通过导航栏切换viewrouter,所以我们将导航栏抽象成组件
推荐
歌手
排行
搜索
app.vue中引入了header.vue和tab组件
3.在index.jds中 配置导航栏路由
import Vue from 'vue'
import Router from 'vue-router'
import Recommend from 'components/recommend/recommend.vue'
import Singer from 'components/singer/singer.vue'
import Rank from 'components/rank/rank.vue'
import Search from 'components/search/search.vue'
// 注册一下vue
Vue.use(Router)
// 配置路由
export default new Router({
routes: [
{
path: '/',
redirect: '/recommend'
},
{
path: '/recommend',
component: Recommend
},
{
path: '/singer',
component: Singer
},
{
path: '/rank',
component: Rank
},
{
path: '/search',
component: Search
}
]
})
4. 配置完路由之后,将组件引入到vue的实例,在main.js中引入
import router from './router'
并传入到vue中
/* eslint-disable no-new */
new Vue({
el: '#app',
router,
render: h => h(App)
})
5.在app.vue中渲染这些组件
骨架搭建完成,接下来是获取数据