赞
踩
vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。
vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。
而传统的多页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。
路由中有三个基本的概念 route, routes, router。
1. route,它是一条路由,由这个英文单词也可以看出来,它是单数, Home按钮 => home内容, 这是一条route, about按钮 => about 内容, 这是另一条路由。
2. routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。[{home 按钮 =>home内容 }, { about按钮 => about 内容}]
3. router 是一个机制,相当于一个管理者,它来管理路由。因为routes 只是定义了一组路由,它放在哪里是静止的,当真正来了请求,怎么办? 就是当用户点击home 按钮的时候,怎么办?
这时router 就起作用了,它到routes 中去查找,去找到对应的 home 内容,所以页面中就显示了 home 内容。
4. 客户端中的路由,实际上就是dom 元素的显示和隐藏。当页面中显示home 内容的时候,about 中的内容全部隐藏,反之也是一样。客户端路由有两种实现方式:基于hash 和基于html5 history api.
1.下载引入VueRouter文件
2.创建组件
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <script type="text/javascript" src="../public/js/vue.min.js"></script>
- <script type="text/javascript" src="../public/js/vue-router-3.4.9.js"></script>
- </head>
- <body>
-
- <div id="app">
-
-
-
- </div>
-
- <!--注册-->
- <template id="register">
- <h1>这是注册页面</h1>
- </template>
-
- <!--登录-->
- <template id="login">
- <h1>这是登录页面</h1>
- </template>
-
- <script>
-
- let RegisterComponent = {
- template:"#register"
- }
-
- let LoginComponent = {
- template: "#login"
- }
-
-
-
- new Vue({
- el:"#app",
- components:{RegisterComponent,LoginComponent}
- });
-
- </script>
-
- </body>
- </html>
3.创建router
- // 创建路由【添加路由规则】
- let vueRouter = new VueRouter({
- routes:[
- {
- name:"register",// 路由名称
- path:"/register",// 组件对应的路由路径
- component:RegisterComponent
- },
- {
- name:"login",// 路由名称
- path:"/login",// 组件对应的路由路径
- component:LoginComponent
- }
- ]
- });
4.挂载router
- new Vue({
- el:"#app",
- components:{RegisterComponent,LoginComponent},
- router
- });
5.使用router
- <div id="app">
-
- <!--<a href="#/register">注册</a>
- <a href="#/login">登录</a>-->
-
- <router-link to="/register">注册</router-link>
- <router-link to="/login">登录</router-link>
-
-
- <hr>
-
- <!-- 负责展示组件-->
- <router-view></router-view>
-
- </div>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <script type="text/javascript" src="../public/js/vue.min.js"></script>
- <script type="text/javascript" src="../public/js/vue-router-3.4.9.js"></script>
- </head>
- <body>
-
- <div id="app">
-
-
- <router-link v-for="(item,index) in array" :key="index" :to="item.path" v-text="item.context"></router-link>
-
- <!-- 负责展示组件-->
- <router-view></router-view>
-
- </div>
-
- <!--注册-->
- <template id="register">
- <h1>这是注册页面</h1>
- </template>
-
- <!--登录-->
- <template id="login">
- <h1>这是登录页面</h1>
- </template>
-
- <script>
-
- let RegisterComponent = {
- template:"#register"
- }
-
- let LoginComponent = {
- template: "#login"
- }
-
-
- // 创建路由【添加路由规则】
- let router = new VueRouter({
- routes:[
- {
- name:"register",// 路由名称
- path:"/register",// 组件对应的路由路径
- component:RegisterComponent
- },
- {
- name:"login",// 路由名称
- path:"/login",// 组件对应的路由路径
- component:LoginComponent
- }
- ]
- });
-
- new Vue({
- el:"#app",
- components:{RegisterComponent,LoginComponent},
- router,
- data:{
- array:[
- {path:"/register",context:"注册"},
- {path:"/login",context:"登录"}
- ]
- }
- });
-
-
- </script>
-
- </body>
- </html>
router-link中的to属性值可以是多种类型
1.声明式导航
直接写在行内的便是声明式导航;
2.编程式导航
- methods:{
- loginGo(){
- this.$router.push({path:"/login"});
- }
- }
$route:是当前路由规则对象
$router:是VueRouter对象
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <script type="text/javascript" src="../public/js/vue.min.js"></script>
- <script type="text/javascript" src="../public/js/vue-router-3.4.9.js"></script>
- </head>
- <body>
-
- <div id="app">
-
-
- <router-link to="/login">登录</router-link>
-
- <router-link :to="{path:'/register'}">注册</router-link>
- <router-link :to="{name:'register'}">注册</router-link>
-
- <button @click="loginGo">跳转到登录</button>
-
-
- <!-- 负责展示组件-->
- <router-view></router-view>
-
- </div>
-
- <!--注册-->
- <template id="register">
- <h1>这是注册页面</h1>
- </template>
-
- <!--登录-->
- <template id="login">
- <h1>这是登录页面</h1>
- </template>
-
- <script>
-
- let RegisterComponent = {
- template:"#register"
- }
-
- let LoginComponent = {
- template: "#login"
- }
-
-
- // 创建路由【添加路由规则】
- let router = new VueRouter({
- routes:[
- {
- name:"register",// 路由名称
- path:"/register",// 组件对应的路由路径
- component:RegisterComponent
- },
- {
- name:"login",// 路由名称
- path:"/login",// 组件对应的路由路径
- component:LoginComponent
- }
- ]
- });
-
- new Vue({
- el:"#app",
- components:{RegisterComponent,LoginComponent},
- router,
- methods:{
- loginGo(){
- console.log(this.$route);
- console.log(this.$router);
- }
- }
- });
-
-
- </script>
-
- </body>
- </html>
1.push:跳转路由【会在历史记录中添加一个记录,这样后退能回到之前的页面】
2.replace:替换导航【不会在历史记录中添加一个记录,不能后退回到之前的页面】
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <script type="text/javascript" src="../public/js/vue.min.js"></script>
- <script type="text/javascript" src="../public/js/vue-router-3.4.9.js"></script>
- </head>
- <body>
-
- <div id="app">
-
-
- <router-link to="/login">登录</router-link>
-
- <router-link :to="{path:'/register'}">注册</router-link>
- <router-link :to="{name:'register'}">注册</router-link>
-
- <button @click="loginGo">跳转到登录</button>
-
-
- <!-- 负责展示组件-->
- <router-view></router-view>
-
- </div>
-
- <!--注册-->
- <template id="register">
- <h1>这是注册页面</h1>
- </template>
-
- <!--登录-->
- <template id="login">
- <h1>这是登录页面</h1>
- </template>
-
- <script>
-
- let RegisterComponent = {
- template:"#register"
- }
-
- let LoginComponent = {
- template: "#login"
- }
-
-
- // 创建路由【添加路由规则】
- let router = new VueRouter({
- routes:[
- {
- name:"register",// 路由名称
- path:"/register",// 组件对应的路由路径
- component:RegisterComponent
- },
- {
- name:"login",// 路由名称
- path:"/login",// 组件对应的路由路径
- component:LoginComponent
- }
- ]
- });
-
- new Vue({
- el:"#app",
- components:{RegisterComponent,LoginComponent},
- router,
- methods:{
- loginGo(){
-
- // this.$router.push({path:"/login"});
- this.$router.replace({path:"/login"});
- }
- }
- });
-
-
- </script>
-
- </body>
- </html>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。