九. 路由
9.1 路由的介绍
- 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源
- 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现
- 在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由)
9.2 路由的基本使用
!!! 第一步要导包 !!!
注意;vue-router.js 依赖于 vue.js 所以要注意顺序
<script src="js/vue-2.4.0.js" type="text/javascript" charset="utf-8"></script>
<script src="js/vue-router-3.0.1.js" type="text/javascript" charset="utf-8"></script>
html代码:
<router-link to="/login" tag="button">登录</router-link>
<router-link to="/register" tag="button">注册</router-link>
<!-- vue-router 提供的占位符 显示相对应得组件 -->
<router-view></router-view>
router-link ,router-view 都是vue-router 提供的元素
两个跳转的组件:
var login ={
// template:'<h1>登录组件---{{$route}}---{{$route}}</h1>',
template:'<h1>登录组件</h1>',
created(){
// console.log(this.$route.params.name)
}
}
var register ={
template:'<h1>注册组件</h1>'
}
路由:
var routerObj=new VueRouter({
//routers --> 【路由匹配规则】
routes:[
//每一个路由匹配规则都是一个对象 都具有两个属性
//path :监听哪个路由的链接地址
//component :表示如果路由匹配到的 path ,则展示component指定的组件
//重定向:redirect 默认路径显示 路径为‘’的组件
{path:'/' ,redirect:'/login'},
{path:'/login',component: login},
{path:'/register' ,component:register}
]
})
vue代码:
var vm =new Vue({
el:'#app',
data:{},
methods:{},
router:routerObj
})
9.3 路由的传值
9.3.1 query 传值
html代码:
<router-link to="/login?id=10&name=zc" tag="button">登录</router-link>
组件:
var login ={
template:'<h1>登录组件---{{$route.query.id}}---{{$route.query.name}}</h1>',
created(){
console.log(this.$route.query)
}
}
9.3.2 params 传值
html代码:
<router-link to="/login/18/zc" tag="button">登录</router-link>
<router-link to="/register" tag="button">注册</router-link>
<!-- vue-router 提供的占位符 显示相对应得组件 -->
<router-view></router-view>
vue代码:
var login ={
template:'<h1>登录组件----{{$route.params.id}}---{{$route.params.name}}</h1>',
created(){
console.log(this.$route.params)
}
}
//路由
var routerObj=new VueRouter({
routes:[
{path:'/' ,redirect:'/login'},
{path:'/login/:id/:name',component: login},
{path:'/register' ,component:register}
]
})
9.4 设置路由高光
css代码:
/* 实现路由高亮 */
.router-link-active{
color: red;
background: skyblue;
}
.myactive{
color: blue;
background: red;
}
路由:
var routerObj=new VueRouter({
routes:[
{path:'/' ,redirect:'/login'},
{path:'/login/:id/:name',component: login},
{path:'/register' ,component:register}
],
//自定义一个active-class
linkActiveClass:'myactive'
})
9.5 路由的嵌套
html代码:
<div id="app">
<router-link to="/account" tag="button">account</router-link>
<router-view></router-view>
</div>
<template id="tem">
<div>
这是你要看的组件
<router-link to="/account/login" tag="button">登录</router-link>
<router-link to="/account/register" tag="button">注册</router-link>
<router-view></router-view>
</div>
</template>
vue代码:
var account={
template:'#tem'
}
//组件模块对象
var login ={
template:'<h1>登录组件</h1>'
}
var register ={
template:'<h1>注册组件</h1>'
}
//创建一个路由对象
var routerObj=new VueRouter({
//routers --> 【路由匹配规则】
routes:[
{
path:'/account',
component:account,
children:[
{path:'login',component: login},
{path:'register' ,component:register}
]
}
]
})
var vm =new Vue({
el:'#app',
data:{},
methods:{},
//将路由注册到实例化对象中 用来监听url地址展示相对应的组件
router:routerObj
})
9.6 命名路由
html代码:
<div id="app">
<router-view></router-view>
<div class="container">
<router-view name="left"></router-view>
<router-view name="main"></router-view>
</div>
</div>
vue代码:
var header = {
template: '<h1 class="header">Header头部区域</h1>'
}
var leftBox = {
template: '<h1 class="left">Left侧边栏区域</h1>'
}
var mainBox = {
template: '<h1 class="main">mainBox主体区域</h1>'
}
var router = new VueRouter({
routes: [
/* { path: '/', component: header },
{ path: '/left', component: leftBox },
{ path: '/main', component: mainBox } */
{
path: '/', components: {
'default': header,
'left': leftBox,
'main': mainBox
}
}
]
})
var vm =new Vue({
el:'#app',
data:{},
methods:{},
router:router
})