首页 > 编程知识 正文

vue全局路由,vue全家桶介绍

时间:2023-05-06 12:50:40 阅读:208262 作者:199

路由

路由是一个比较广义和抽象的概念,路由的本质就是对应关系。
在开发中,路由分为:

后端路由前端路由 后端路由

概念:根据不同的用户 URL 请求,返回不同的内容
本质:URL 请求地址与服务器资源之间的对应关系

前端路由

概念:根据不同的用户事件,显示不同的页面内容
本质:用户事件与事件处理函数之间的对应关系

Vue-Router

Vue Router(官网)是 Vue.js 官方的路由管理器。
它和 Vue.js 的核心深度集成,可以非常方便的用于SPA应用程序的开发。

支持HTML5 历史模式或 hash 模式支持嵌套路由支持路由参数支持编程式路由支持命名路由 路由的基本使用 引入相关的库文件添加路由链接添加路由填充位定义路由组件配置路由规则并创建路由实例把路由挂载到 Vue 根实例中 <!-- 导入 vue 文件 --> <script src="./lib/vue_2.5.22.js"></script> <script src="./lib/vue-router_3.0.2.js"></script> </head> <body> <!-- 被 vm 实例所控制的区域 --> <div id="app"> <router-link to="/user">User</router-link> <router-link to="/register">Register</router-link> <!-- 路由占位符 --> <router-view></router-view> </div> <script> const User = { template: '<h1>User 组件</h1>' } const Register = { template: '<h1>Register 组件</h1>' } // 创建路由实例对象 const router = new VueRouter({ // 所有的路由规则 routes: [ { path: '/user', component: User }, { path: '/register', component: Register } ] }) // 创建 vm 实例对象 const vm = new Vue({ // 指定控制的区域 el: '#app', data: {}, // 挂载路由实例对象 // router: router router }) </script> </body> 路由重定向

路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面;
通过路由规则的 redirect 属性,指定一个新的路由地址,可以很方便地设置路由的重定向

var router = new VueRouter({ routes: [ // 其中,path 表示需要被重定向的原地址,redirect 表示将要被重定向到的新地址 {path:'/', redirect: '/user'}, {path:'/user',component: User}, {path:'/register',component: Register} ] }) 路由嵌套 父级路由通过children属性配置子级路由子级路由模板 子级路由链接子级路由填充位 <body> <!-- 被 vm 实例所控制的区域 --> <div id="app"> <router-link to="/user">User</router-link> <router-link to="/register">Register</router-link> <!-- 路由占位符 --> <router-view></router-view> </div> <script> const User = { template: '<h1>User 组件</h1>' } const Register = { template: `<div> <h1>Register 组件</h1> <hr/> <!-- 子路由链接 --> <router-link to="/register/tab1">tab1</router-link> <router-link to="/register/tab2">tab2</router-link> <!-- 子路由的占位符 --> <router-view /> <div>` } const Tab1 = { template: '<h3>tab1 子组件</h3>' } const Tab2 = { template: '<h3>tab2 子组件</h3>' } // 创建路由实例对象 const router = new VueRouter({ // 所有的路由规则 routes: [ { path: '/', redirect: '/user'}, { path: '/user', component: User }, // children 数组表示子路由规则 { path: '/register', component: Register, children: [ { path: '/register/tab1', component: Tab1 }, { path: '/register/tab2', component: Tab2 } ] } ] }) // 创建 vm 实例对象 const vm = new Vue({ // 指定控制的区域 el: '#app', data: {}, // 挂载路由实例对象 // router: router router }) </script> </body> 动态路由参数匹配 通过动态路由参数的模式进行路由匹配 var router = new VueRouter({ routes: [ // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } ]})const User = { // 路由组件中通过$route.params获取路由参数 template: '<div>User {{ $route.params.id }}</div>'}

注意:$route与对应路由形成高度耦合,不够灵活,所以可以使用props将组件和路由解耦

props的值为布尔类型 const router = new VueRouter({ routes: [ // 如果 props 被设置为 true,route.params 将会被设置为组件属性 { path: '/user/:id', component: User, props: true } ] })const User = { props: ['id'], // 使用 props 接收路由参数 template: '<div>用户ID:{{ id }}</div>' // 使用路由参数 } props的值为对象类型 const router = new VueRouter({ routes: [ // 如果 props 是一个对象,它会被按原样设置为组件属性 { path: '/user/:id', component: User, props: { uname: 'lisi', age: 12 }} ] })const User = { props: ['uname', 'age'], template: ‘<div>用户信息:{{ uname + '---' + age}}</div>' } props的值为函数类型 const router = new VueRouter({ routes: [ // 如果 props 是一个函数,则这个函数接收 route 对象为自己的形参 { path: '/user/:id', component: User, props: route => ({ uname: 'zs', age: 20, id: route.params.id })} ] })const User = { props: ['uname', 'age', 'id'], template: ‘<div>用户信息:{{ uname + '---' + age + '---' + id}}</div>' } 命名路由

为了更加方便的表示路由的路径,可以给路由规则起一个别名。

const router = new VueRouter({ routes: [ { path: '/user/:id', name: 'user', component: User } ] }) <router-link :to="{ name: 'user', params: { id: 123 }}">User</router-link> router.push({ name: 'user', params: { id: 123 }}) 编程式导航 声明式导航:通过点击链接实现导航的方式,叫做声明式导航
例如:普通网页中的 链接 或 vue 中的 编程式导航:通过调用JavaScript形式的API实现导航的方式,叫做编程式导航
例如:普通网页中的 location.href 常用的编程式导航 API 如下: this.$router.push(‘hash地址’)this.$router.go(n) const User = { template: '<div><button @click="goRegister">跳转到注册页面</button></div>', methods: { goRegister: function(){ // 用编程的方式控制路由跳转 this.$router.push('/register'); } } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。