输入cnpm i vue-router -S
以安装vue-router包
导入VueRouter的包之前 必须先导入Vue的包:
import Vue from "vue"
import VueRouter from "vue-router"
然后手动调用Vue.use()
方法 将vue-router安装到Vue上:
Vue.use(VueRouter)
// 导入account组件
import account from "./main/Account.vue"
// 导入goodslist组件
import goodslist from "./main/GoodsList.vue"
var router=new VueRouter({
routes:[
// 定义路由规则
{path:"/account",component:account},
{path:"/goodslist",component:goodslist}
]
})
var vm=new Vue({
el:"#app",
render:create=>create(app),
// 挂载路由对象
router
})
注:因为render会将el属性指定的容器里面的所有内容全部都清空覆盖
因此 不能将路由的
因此 可以将路由的
这样 当app组件展示出来时 就必然能看到路由的内容了
App.vue:
<template>
<div>
<h1>This is App componenth1>
<router-link to="/account">accountrouter-link>
<router-link to="/goodslist">goodslistrouter-link>
<router-view>router-view>
div>
template>
<script>
export default {
}
script>
<style>
style>
在上面的案例中:
App.vue组件是通过vm实例的render函数渲染出来的
render函数若要渲染组件 则渲染出的组件只能放到el属性所指定的元素中去
而Account和GoodsList组件是通过路由匹配监听到的 因此这两个组件只能展示到路由的
标签里
main.js:
import login from "./subcomponent/login.vue"
import register from "./subcomponent/register.vue"
var router=new VueRouter(
{
routes:[
// 定义路由规则
{
path:"/account",
component:account,
// 子路由(path前面不带斜杠)
children:[
{path:"login",component:login},
{path:"register",component:register}
]
},
{path:"/goodslist",component:goodslist}
]
})
Account.vue:
<template>
<div>
<h1>This is Account componenth1>
<router-link to="/account/login">loginrouter-link>
<router-link to="/account/register">registerrouter-link>
<router-view>router-view>
div>
template>
<script>
export default {
}
script>
<style>
style>
导入组件和创建路由对象的代码过于冗长 可进行抽取 使代码更加简洁
main.js:
// 导入Vue
import Vue from "vue"
// 导入VueRouter路由
import VueRouter from "vue-router"
// 手动安装vue-router
Vue.use(VueRouter)
// 导入app组件
import app from "./App.vue"
// 导入account组件
import account from "./main/Account.vue"
// 导入goodslist组件
import goodslist from "./main/GoodsList.vue"
// 导入account的子组件
import login from "./subcomponent/login.vue"
import register from "./subcomponent/register.vue"
// 创建路由对象
var router=new VueRouter(
{
routes:[
// 定义路由规则
{
path:"/account",
component:account,
// 子路由(path前面不带斜杠)
children:[
{path:"login",component:login},
{path:"register",component:register}
]
},
{path:"/goodslist",component:goodslist}
]
})
var vm=new Vue({
el:"#app",
render:create=>create(app),
// 挂载路由对象
router
})
分成了两个js文件 router.js文件专门用于存放路由相关的代码
然后再在main.js里导入router.js暴露的路由模块即可
router.js:
// 导入VueRouter路由
import VueRouter from "vue-router"
// 导入account组件
import account from "./main/Account.vue"
// 导入goodslist组件
import goodslist from "./main/GoodsList.vue"
// 导入account的子组件
import login from "./subcomponent/login.vue"
import register from "./subcomponent/register.vue"
// 创建路由对象
var router=new VueRouter(
{
routes:[
// 定义路由规则
{
path:"/account",
component:account,
// 子路由(path前面不带斜杠)
children:[
{path:"login",component:login},
{path:"register",component:register}
]
},
{path:"/goodslist",component:goodslist}
]
})
// 将路由对象暴露出去
export default router;
main.js:
// 导入Vue
import Vue from "vue"
// 导入VueRouter路由
import VueRouter from "vue-router"
// 手动安装vue-router
Vue.use(VueRouter)
// 导入app组件
import app from "./App.vue"
// 导入自定义的路由模块
import router from "./router.js"
var vm=new Vue({
el:"#app",
render:create=>create(app),
// 挂载路由对象
router
})