1、创建一个vue项目
#在要创建项目的地方进入终端
$ vue create my-app
2、选择项目所需要的组件,手动选择下面组件
3、配置main.js文件
因为这里我们用到了VantUI的插件来做头尾
import Vue from 'vue'
import App from './App.vue'
import Vant from 'vant'
import 'vant/lib/index.css'
import router from './router'
Vue.config.productionTip = false
Vue.use(Vant)
new Vue({
router,
render: h => h(App)
}).$mount('#app')
4、components中新建MyHeader.vue与MyHeader组件完成复用
5、在App.vue中引入Myheader与Myfooter,并使用组件
import MyHeader from '@/components/MyHeader'
export default {
name: 'app',
components: {
MyHeader,
MyFooter
}
}
6、在views中新建Home.vue、Mall.vue、Cart.vue、Mine.vue
7、配置tab选项卡的路由
在router中新建routes.js
import Home from '@/views/Home'
import DtFooter from '@/components/MyFooter'
//懒加载
const Mall = () => import('@/views/Mall')
const Cart = () => import('@/views/Cart')
const Mine = () => import('@/views/Mine')
export default [
{
path: '/',
redirect: '/home',
meta: {
isTabbar: false
}
},
{
path: '/home',
name: 'home',
components: {
default: Home,
footer: DtFooter
},
meta: {
isTabbar: true,
title: '首页',
icon: ''
}
},
{
path: '/mall',
name: 'mall',
components: {
default: Mall,
footer: DtFooter
},
meta: {
isTabbar: true,
title: '商城',
icon: ''
}
},
{
path: '/cart',
name: 'cart',
components: {
default: Cart,
footer: DtFooter
},
meta: {
isTabbar: true,
title: '购物车',
icon: ''
}
},
{
path: '/mine',
name: 'mine',
components: {
default: Mine,
footer: DtFooter
},
meta: {
isTabbar: true,
title: '我的',
icon: ''
}
}
]
在router中新建index.js引入routes
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
Vue.use(VueRouter)
const router = new VueRouter({
mode: process.env.NODE_ENV === 'development' ? 'hash' : 'history',
routes
})
export default router
8、在MyFooter.vue中引入routes.js(容易忘记)
import routes from '@/router/routes'
9、这时候我们可以在App.vue中写组件的html的基本结构了
<template>
<div class="dt">
<MyHeader />
<div class="dt-main">
<router-view />
</div>
<MyFooter />
</div>
</template>
10、骨架搭建好了,接下来该在App.vue中reset样式了,以下仅供参考
<style lang="scss">
html, body, div, span,
h1, h2, h3, h4, h5, h6, p,
a, em, img, b, u, i, dl, dt, dd, ol, ul, li, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
ol, ul {
list-style: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
html,
body {
line-height: 1;
font-size: 12px;
width: 100%;
height: 100%;
font-family: 'PingFangSC-Light', 'PingFang SC', 'STHeitiSC-Light', 'Helvetica-Light', 'Arial', 'sans-serif';
}
.dt {
display: flex;
flex-direction: column;
height: 100%;
&-main {
flex: 1;
overflow: hidden;
}
}
</style>
11、效果如图,已经实现路由跳转