1.执行vue.create app-name
创建一个项目
2.进入到项目目录,如果没有安装router,就执行npm install vue-router -s
安装vue-router并写入依赖
3.清除无用的文件,让src
目录保持最简单的一个min.js
和App.vue
即可
4.创建一个名为views
的目录,在里面分别创建Home.vue
,Mall.vue
,Cart.vue
,Mine.vue
这四个页面级的视图组件
5.创建一个名为router
的目录,分别创建index.js
和routes.js
// src/router/route.js
// 非页面级别的组件,一般不需要做成异步组件
import ProFooter from '@/components/ProFooter'
// 以下页面级别的组件,需要做成异步组件
const Home = () => import('@/views/Home')
const Mall = () => import('@/views/Mall')
const Cart = () => import('@/views/Cart')
const Mine = () => import('@/views/Mine')
// 导出的配置项
export default [
// 根目录访问,直接定向到/home
{
path: '/',
redirect: '/home',
meta: {
isTabItem: false //由于tabbar的数据与routes的数据是共享的,但是又不是全部的routes数据,所以需要加一个标记来确定该路由是否需要显示在tabbar
}
},
// 首页的组件和路由
{
path: '/home', // 访问的路径
name: 'home', // 路由的名字
components: {
default: Home, // 默认的router-view
footer: ProFooter // 带有name="footer"属性的router-view
},
meta: {
isTabItem: true,
title: '首页', // 用于显示在tabbar上得到文字
icon: '' // tabbar的icon,注意这里是unicode,渲染的时候需要加v-html,而不是插值表达式
}
},
{
path: '/mall',
name: 'mall',
components: {
default: Mall,
footer: ProFooter
},
meta: {
isTabItem: true,
title: '商场',
icon: ''
}
},
{
path: '/cart',
name: 'cart',
components: {
default: Cart,
footer: ProFooter
},
meta: {
isTabItem: true,
title: '购物车',
icon: ''
}
},
{
path: '/mine',
name: 'mine',
components: {
default: Mine,
footer: ProFooter
},
meta: {
isTabItem: true,
title: '我的',
icon: ''
}
}
]
// src/router/index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
Vue.use(VueRouter)
export default new VueRouter({
routes
})
6 开始你的布局,在App.vue里,把头部,主体和底部的布局先写好,样式什么样,就自己定,注意在写布局的时候最好加入css的设计
<template>
<div class="pro-container">
<div class="pro-header">
头部
div>
<div class="pro-main">
主体
div>
<div class="pro-tabbar">
底部
div>
div>
template>
7,下一步在头部直接加入一个组件,在主体部分加入router.view,在底部也加上一个带有命名的router-view
<template>
<div class="pro-container">
<div class="pro-header">
// 这个组件是不需要使用router-vue渲染的
<ProHeader>ProHeader>
div>
<div class="pro-main">
<router-view>router-view>
div>
<div class="pro-tabbar">
<router-view name="footer">router-view>
div>
div>
template>
<script>
import ProHeader from '@/components/ProHeader'
export default {
components: {
ProHeader
}
}
script>
<style lang="scss">
html, body, div, span,
h1, h2, h3, h4, h5, h6, p, a,
b, u, i, center,
dl, dt, dd, ol, ul, li,
form, label,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details,
figure,footer, header,
menu, nav, section,
audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
html,
body {
height: 100%;
overflow: hidden;
}
.pro {
&-container{
display: flex;
flex-direction: column;
height: 100%;
}
&-main {
flex: 1;
overflow-x: hidden;
}
}
@font-face {
font-family: 'proicon'; /* project id 1171929 */
src: url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.eot');
src: url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.woff2') format('woff2'),
url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.woff') format('woff'),
url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.ttf') format('truetype'),
url('//at.alicdn.com/t/font_1171929_kvjruo3j3q.svg#iconfont') format('svg');
}
style>