@[toc]
什么是路由
- 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源;
- 前端路由:对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页面之间的切换,同时,hash有一个特点:HTTP请求中不会包含hash相关的内容;所以,单页面程序中的页面跳转主要用hash实现;
-
在单页面应用程序中,这种通过hash改变来切换页面的方式,称作前端路由(区别于后端路由);
在 vue 中使用 vue-router
-
导入 vue-router 组件类库:
<!-- 1. 导入 vue-router 组件类库 --> <script src="../lib/vue-router-2.7.0.js"></script>
-
使用 router-link 组件来导航
<!-- 2. 使用 router-link 组件来导航 --> <router-link to="/login">登录</router-link> <router-link to="/register">注册</router-link>
-
使用 router-view 组件来显示匹配到的组件
<!-- 3. 使用 router-view 组件来显示匹配到的组件 --> <router-view></router-view>
- 创建使用
Vue.extend
创建组件// 4.1 使用 Vue.extend 来创建登录组件 var login = Vue.extend({ template: '登录组件' });
// 4.2 使用 Vue.extend 来创建注册组件
var register = Vue.extend({
template: '注册组件'
});
5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
```vue
// 5. 创建一个路由 router 实例,通过 routers 属性来定义路由匹配规则
var router = new VueRouter({
routes: [
{ path: '/login', component: login },
{ path: '/register', component: register }
]
});
-
使用 router 属性来使用路由规则
// 6. 创建 Vue 实例,得到 ViewModel var vm = new Vue({ el: '#app', router: router // 使用 router 属性来使用路由规则 });
使用tag属性指定router-link渲染的标签类型
<!-- router-link 默认渲染为一个a 标签 --> <router-link to="/login" tag="span">登录</router-link> <router-link to="/register">注册</router-link>
设置路由重定向
routes: [ // 路由匹配规则 // 每个路由规则,都是一个对象,这个规则对象,身上,有两个必须的属性: // 属性1 是 path, 表示监听 哪个路由链接地址; // 属性2 是 component, 表示,如果 路由是前面匹配到的 path ,则展示 component 属性对应的那个组件 // 注意: component 的属性值,必须是一个 组件的模板对象, 不能是 组件的引用名称; // { path: '/', component: login }, { path: '/', redirect: '/login' }, // 这里的 redirect 和 Node 中的 redirect 完全是两码事 { path: '/login', component: login }, { path: '/register', component: register } ],
设置路由高亮
.router-link-active, .myactive { color: red; font-weight: 800; font-style: italic; font-size: 80px; text-decoration: underline; background-color: green; }
设置路由切换动效
.v-enter, .v-leave-to { opacity: 0; transform: translateX(140px); } .v-enter-active, .v-leave-active { transition: all 0.5s ease; }
在路由规则中定义参数
-
在规则中定义参数:
{ path: '/register/:id', component: register }
-
通过
this.$route.params
来获取路由中的参数:var register = Vue.extend({ template: '注册组件 --- {{this.$route.params.id}}' });
使用
children
属性实现路由嵌套<div id="app"> <router-link to="/account">Account</router-link> <router-view></router-view> </div>
<script>
// 父路由中的组件
const account = Vue.extend({
template: <div><br/>这是account组件<br/><router-link to="/account/login">login</router-link> | <br/><router-link to="/account/register">register</router-link><br/><router-view></router-view><br/></div>
});
// 子路由中的 login 组件
const login = Vue.extend({
template: '<div>登录组件</div>'
});
// 子路由中的 register 组件
const register = Vue.extend({
template: '<div>注册组件</div>'
});
// 路由实例
var router = new VueRouter({
routes: [
{ path: '/', redirect: '/account/login' }, // 使用 redirect 实现路由重定向
{
path: '/account',
component: account,
children: [ // 通过 children 数组属性,来实现路由的嵌套
{ path: 'login', component: login }, // 注意,子路由的开头位置,不要加 / 路径符
{ path: 'register', component: register }
]
}
]
});
// 创建 Vue 实例,得到 ViewModel
var vm = new Vue({
el: '#app',
data: {},
methods: {},
components: {
account
},
router: router
});
</script>
> 本文内容到此结束了,
> 如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
> 如有错误❌疑问💬欢迎各位大佬指出。
> **主页**:[共饮一杯无的博客汇总👨💻](https://blog.51cto.com/zhanjq)
>
> **保持热爱,奔赴下一场山海**。🏃🏃🏃
