1.Vue-router基础知识(上)请移步博客:
https://blog.csdn.net/weixin_41957626/article/details/127438234
案例代码免费下载地址为:
vue路由案例的代码test1-test5-Javascript文档类资源-CSDN下载
如下载失败私聊博主即可♥
在Vue-router基础知识(上)我们主要学习了什么是前端路由和什么是后端路由,学会了vue-router的基本使用,两种传递参数的方式以及$route.query以及$route.params的使用。学会了使用children实现路由的嵌套。
下面通过一个简单的案例回顾昨天学习的知识。
案例如下:首先显示的是如下界面。下面的“电脑登录入口”和“手机登录入口”是两个子组件。

当点击“电脑登录入口”就会显示电脑登录的入口地址。

当点击“关于我们”就会跳转到“关于我们”的界面。

参考代码:test5回顾.html
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>知识回顾</title>
- <!-- 导入vue和vue-router -->
- <script src="vue.js"></script>
- <script src="vue-router.js"></script>
- </head>
-
- <body>
- <div id="app">
- <!-- 定义路由超链接 -->
- <!-- to指定的是我们前端路由的路径 -->
- <ul>
- <router-link to="/login" tag="li">登录</router-link>
- <router-link to="/about" tag="li">关于我们</router-link>
- </ul>
- <!-- 给父路由组件提供插入的位置 -->
- <router-view></router-view>
- </div>
- <!-- 关于我们界面(组件) -->
- <template id="login-tmp">
- <div>
- <h1>请选择合适的登录入口</h1>
- <router-link to="/login/pc">电脑登录入口</router-link> |
- <router-link to="/login/phone">手机登录入口</router-link>
- <router-view></router-view>
- <!--给子路由组件提供插入位置-->
- </div>
- </template>
- <!-- 联系我们 -->
- <template id="contact-tmp">
- <div>
- <h1>联系我们</h1>
- <p>我是一个热爱计算机的无名小卒
- </p>
- </div>
- </template>
-
- </body>
- <!-- 创建组件 -->
- <script>
-
- // 创建路由的组件
- var login = { template: '#login-tmp' }
- var contact = { template: '#contact-tmp' }
- // 创建子路由的组件
- var pc = { template: '
当前是电脑登录的入口...
' } - var phone = {
- template: '
当前是手机登录的入口...
' - }
- // 创建路由
- var router = new VueRouter({
- routes: [
- // 默认显示的就是login界面
- // 路由重定向
- { path: '/', redirect: '/login' },
- // 定义嵌套的路由
- {
- path: '/login', component: login,
- // 定义子路由
- children: [
- { path: 'pc', component: pc },
- { path: 'phone', component: phone }
- ]
- },
- { path: '/contact', component: contact }
- ]
- })
-
- // 创建vue实例对象
- const vm = new Vue({
- // 设置挂载点
- el: "#app",
- // 将路由规则绑定到当前的vm实例上去
- router: router
- })
- </script>
-
-
- </html>
1.简介:
白话:就是自定指定路由的名称。就不用写path那么长的路径了直接引用名称就可以。
vue-router提供了一种隐式的引用路径,即命名路由,可以在创建Router实例的时候,在 routes 中给某个路由设置名称name值。
通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候,通过路由的名称取代路径地址直接使用。
命名路由的方式下,无论path多长、多烦琐,都能直接通过name来引用,十分方便。
第一步:采用对象最为路由的方式
- <!--当使用对象作为路由的时候,to前面要加一个冒号,表示绑定-->
- <router-link :to="{name:'user',params:{id:123}}">登录</router-link>
- <router-view></router-view>
第二步:编写组件代码
- var user = {
- template: '<h3>我是user组件{{$route.params.id}}h3>'
- }
第三步:创建路由对象
- // 创建路由对象
- var router = new VueRouter({ // 创建路由对象
- routes: [{ path: '/user/:id', name: 'user', component: user }]
- })
- var vm = new Vue({ el: '#app', router })
test6.html完整代码如下:
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <!-- 引入vue和vue-router -->
- <script src="vue.js"></script>
- <script src="vue-router.js"></script>
- </head>
-
- <body>
- <div id="app">
- <!--当使用对象作为路由的时候,to前面要加一个冒号,表示绑定-->
- <router-link :to="{name:'user',params:{id:123}}">登录</router-link>
- <router-view></router-view>
- </div>
-
- <script>
- // 编写组件代码
- var user = {
- template: '
我是user组件{{$route.params.id}}
' - }
- // 创建路由对象
- var router = new VueRouter({ // 创建路由对象
- routes: [{
- path: '/user/:id', name: 'user',
- component: user }]
- })
- var vm = new Vue({ el: '#app', router })
-
- </script>
- </body>
-
- </html>
不使用命名路由的方式如下:其余代码保持不变。

第一步创建路由

采用的是对象传递参数的方法

1.什么是命名视图
白话:就是对router-view起一个名字,将指定的组件放到指定的router-view中去。
简介:在开发中,有时候想同时或同级展示多个视图,而不是嵌套展示,则可以在页面中定义多个单独命名的视图。
使用可以为视图进行命名,它主要用来负责路由跳转后组件的展示。在上定义name属性表示视图的名字,然后就可以根据不同的name值展示不同的页面,如left、main等。
如果没有设置名字,那么默认为default。
要实现的效果图:

参考代码:test8.html
- html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Documenttitle>
-
- <script src="vue.js">script>
- <script src="vue-router.js">script>
-
- <style>
- html,
- body {
- margin: 0;
- padding: 0;
- }
-
- h1 {
- margin: 0;
- padding: 0;
- font-size: 16px;
- }
-
- .header {
- background-color: lightblue;
- height: 80px;
- }
-
- .container {
- display: flex;
- height: 600px;
- }
-
- .sidebar {
- background-color: lightgreen;
- flex: 2;
- }
-
- .main {
- background-color: lightpink;
- flex: 8;
- }
- style>
- head>
-
- <body>
- <div id="app">
-
- <router-view>router-view>
- <div class="container">
-
-
- <router-view name="left">router-view>
- <router-view name="main">router-view>
- div>
- div>
-
-
- <script>
- // 组件代码
- var header = { template: '
header头部区域
' } - var sidebar = { template: '
sidebar侧导航区域
' } - var mainBox = { template: '
mainBox主体区域
' } - var router = new VueRouter({
- routes: [{
- path: '/',
- components: {
- 'default': header,
- 'left': sidebar,
- 'main': mainBox
- }
- }]
- })
- // 绑定路由
- var vm = new Vue({ el: '#app', router })
-
-
- script>
- body>
-
- html>
效果图如下:

1.重点
白话,不用非得写router-link实现跳转,可以写对应的js代码实现跳转。比如给button按钮绑定可以实现组件跳转。
注意点:router.push()方法的参数可以是一个字符串路径,或者是一个描述路径的对象
在参数对象中,如果提供了path,params会被忽略,为了传参数,需要提供路由的name或者手写带有参数的path。
效果图:
单击前:
点击登录后的界面。

有两种实现方式:query传参和params传参的方式。

(1)参考代码:test8.html。query传参的方式。
- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <!-- 引入vue和vue-router -->
- <script src="vue.js"></script>
- <script src="vue-router.js"></script>
- </head>
-
- <body>
- <div id="app">
- <!-- 不用原先的router-link实现跳转 -->
- <button @click="goLogin">点我去登录</button>
- <router-view></router-view>
- </div>
-
-
- <script>
- // 2.定义组件
- var login = {
- template: '
用户名:{{ $route.query.name }}
' - }
- // 3.创建路由对象
- var router = new VueRouter({
- routes: [
- { path: '/login', component: login }
- ]
- })
- // 4.绑定路由
- var vm = new Vue({
- el: '#app',
- methods: {
- goLogin() {
- // 点击route-link :to等同于下面的语句.掩藏了请求的地址
- router.push({ path: '/login', query: { name: '张三' } })
- }
- },
- router
- })
-
-
- </script>
- </body>
-
- </html>
(2)参考代码:test9.html。params传参的方式。
和query传参的不同点如下。

- <!DOCTYPE html>
- <html lang="en">
-
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Document</title>
- <!-- 引入vue和vue-router -->
- <script src="vue.js"></script>
- <script src="vue-router.js"></script>
- </head>
-
- <body>
- <div id="app">
- <!-- 不用原先的router-link实现跳转 -->
- <button @click="goLogin">点我去登录</button>
- <router-view></router-view>
- </div>
-
-
- <script>
- // 2.定义组件
- var login = {
- template: '
用户名:{{ $route.params.name }}
' - }
- // 3.创建路由对象
- var router = new VueRouter({
- routes: [
- { path: '/login', name: 'login', component: login }
- ]
- })
- // 4.绑定路由
- var vm = new Vue({
- el: '#app',
- methods: {
- goLogin() {
- // 点击route-link :to等同于下面的语句.掩藏了请求的地址
- router.push({ name: 'login', path: '/login', params: { name: '张三' } })
- }
- },
- router
- })
-
-
- </script>
- </body>
-
- </html>
效果图:

登录后的界面

1.简介:router.replace()方法和router.push()方法类似,区别在于,为设置replace属性后,当单击时,就会调用router.replace(),导航后不会向history栈添加新的记录,而是替换当前的history记录。
总之,不常用
2.常见的两种声明的方式

1.简介:router.go()方法的参数是一个整数,表示在history历史记录中向前或者后退多少步,类似于window.history.go()。
router.go(-1)相当于history.back(),表示后退一步,router.go(1)相当于history.forward(),表示前进一步,功能类似于浏览器上的后退和前进按钮,相应的地址栏也会发生改变。
效果图:

参考代码:test10.htnl
- <!DOCTYPE html>
- <html>
-
- <head>
- <meta charset="UTF-8">
- <title>Document</title>
- <script src="vue.js"></script>
- <script src="vue-router.js"></script>
- </head>
-
- <body>
- <div id="app">
- <button @click="goBack">后退</button>
- <button @click="login">登录</button>
- <router-view></router-view>
- </div>
- <script>
- // 2.定义组件
- var login = { template: '
欢迎{{$route.params.name}}登录成功!
' } - // 3.创建路由
- var router = new VueRouter({
- routes: [
- { path: '/login', name: 'login', component: login }
- ]
- })
- // 3.绑定对象
- var vm = new Vue({
- el: '#app',
- methods: {
- goBack() {
- router.go(-1) // 使用router.go()进行后退操作
- },
- login() {
- router.push({ name: 'login', params: { name: 'admin' } })
- }
- },
- router
- })
- </script>
- </body>
-
- </html>
-
-
-