九. 路由
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 })
来源:https://www.cnblogs.com/hardywen/p/12014870.html