vue-router

1.路由的基本概念与原理

路由 是一个比较广义和抽象的概念,路由的本质就是对应关系

在开发中,路由分为

1.1 后端路由

概念:根据不同的用户URL请求,返回不同的内容
本质:URL请求地址与服务器资源之间的对应关系
在这里插入图片描述2.
SPA (SIngles Page Application )

(1)后端渲染(存在性能问题,整页的刷新等)
(2)Ajax前端渲染(前端渲染提高性能,可以局部刷新,但是不支持浏览器前进后退操作,浏览器无法保存用户在浏览器的状态)
(3)SPA(Single Page Application)单页面应用程序:整个网站只有一个页面,内容的变化通过Ajax局部刷新实现,同时支持浏览器地址栏前进和后退操作
(4)SPA实现原理之一:基于URL地址的hash(hash的变化会导致浏览器记录访问历史的变化,但是hash的变化不会触发新的URL请求)
(5)在实现SPA过程中,最核心的技术点就是前端路由

1.2.前端路由

概念:根据不同的用户事件,显示不同的页面内容
本质:用户事件与事件处理函数之间的对应关系
在这里插入图片描述

2.路由的基本使用

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

2.1vue Router 包含的功能有

1.支持HTML5历史模型或hash模式
2.支持嵌套路由
3.支持路由参数
4.支持编程式路由
5.支持命名路由

2.2vue Router 的基本使用步骤

1.引用相关的库文件
2.添加路由链接
3.添加路由填充位
4.定义路由组件
5.配置路由规则并创建路由实例‘
6.把路由挂载到Vue根实例中’

一、引入相关的库文件
vue文件一定要在最上面

 <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vue@2.6.14"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue-router/dist/vue-router.js"></script>

二、添加路由链接
router-link是vue中提供的标签,默认会被渲染为a标签
to属性默认会被渲染为href属性
to属性的值默认会被渲染为#开头的hash地址

 <router-link to="/user">User</router-link>
        <router-link to="/register">Register</router-link>

三、路由填充位
路由填充位也叫路由占位符,将通过路由规则匹配到的组件,将会被渲染到router-view所在的位置

 <router-view></router-view>

四、定义路由组件

  const User = {
            template: '<h1>User组件</h1>'
        }  
        const Register = {
            template: '<h1>Register</h1>'
        }

五、配置路由规则并创建路由实例
最起码要包含path 和 component
在这里插入图片描述

 //创建路由实例对象
        const router = new VueRouter({
            //所有的路由规则
            routes: [
                {
                    path: '/user',
                    component: User
                },
                {
                    path: '/register',
                    component: Register
                }
            ]
        })

六、把路由挂载到Vue根实例中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

由图可见 变成了标签

2.3 路由重定向

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

应用:
当你访问根路径的时候,让他直接打开到user页面
在这里插入图片描述

  {
                    path: '/',
                    redirect: '/user'
                },

3.vue-router嵌套路由

3.1嵌套路由用法
3.1.1 嵌套路由功能

(1)点击父级路由链接显示模板内容
(2)模板内容中又有子路由链接
(3)点击子级路由链接显示子级模板内容
在这里插入图片描述

3.1.2 父路由组件模板

父级路由链接
父级路由填充

        <router-link to="/user">User</router-link>
        <router-link to="/register">Register</router-link>
        <!-- 路由占位符 -->
        <router-view></router-view>
3.1.3子组件路由模板

子级路由链接
子级路由填充位

 const Register = {
            template: `<div>
                <h1>Register组件1</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>'
        }
3.1.4嵌套路由规则

父级路由通过children属性配置子级路由

 {
                    path: '/register',
                    component: Register,
                    children: [
                        {
                            path: '/register/tab1',
                            component: Tab1
                        },
                        {
                            path: '/register/tab2',
                            component: Tab2
                        }
                    ]
                }

效果图
在这里插入图片描述

vue-router动态路由匹配

4.1 动态匹配路由的基本用法

应用场景:通过动态路由参数的模式进行路由匹配
在这里插入图片描述
在这里插入图片描述代码实现
先在template中修改

<div id="app">
        <router-link to="/user/1">User1</router-link>
        <router-link to="/user/2">User2</router-link>
        <router-link to="/user/3">User3</router-link>
        <router-link to="/register">Register</router-link>
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>

再到路由里面去修改

 {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User
                },

最后到修改子组件

  const User = {
            template: '<h1>User组件 --用户的id{{$route.params.id}}</h1>'
        } 

在这里插入图片描述

4.2路由组件传递参数

4.2.1 使用$route进行接收值
第一步在router中进行相应路由规则的编写

  {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User
                },

在子组件进行相应的接收

  const User = {
            template: '<h1>User组件 --用户的id{{$route.params.id}}</h1>'
        }  

结果:
在这里插入图片描述

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

4.2.2 props的值为布尔类型
在这里插入图片描述

第一步在router里面的user路由规则设置props:true

  {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User,
                    props: true
                },

第二步咋到相应子组件中设置接收props

 const User = {
            props: ['id'],
            template: '<h1>User组件 --用户的id:{{id}}</h1>'
        }

在这里插入图片描述

4.2.3 props的值为对象类型
在这里插入图片描述

第一步现在router中对相应的路由规则设置

 {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User,
                    props: {
                        uname: 'lisi',
                        age: 12
                    }
                },

再到相应子组件中接收

 const User = {
            props: ['uname','age'],
            template: '<h1>User组件 --用户的名字{{uname}}和年龄{{age}}</h1>'
        } 

4.2.4 props的值为函数类型

在这里插入图片描述

第一步是router中找到相应的路由规则进行编写

 {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User,
                    props: route => ({
                        uname: 'Alan',
                        age: 23,
                        id: route.params.id
                    })
                },

第二步到相应子组件中接收值

 const User = {
            props: ['id','uname','age'],
            template: '<h1>User组件 --用户的id{{id}}和名字{{uname}}和年龄{{age}}</h1>'
        }  

5.vue-router命名路由

5.1 命名路由的配置规则

为了更好方便的表示路由的路径,可以给路由规则起一个别名,即为命名路由
在这里插入图片描述
就是上面name:‘user’就是它的命名路由

在router中的相应的路由规则中设置name

 {
                    path: '/user/:id',
                    //和to里面的一样
                    component: User,
                    name: 'user',
                    props: route => ({
                        uname: 'Alan',
                        age: 23,
                        id: route.params.id
                    })
                },

在template中router-link 中将to改为:to

<div id="app">
        <router-link to="/user/1">User1</router-link>
        <router-link to="/user/2">User2</router-link>
        <router-link :to="{name: 'user',params:{id:3}}">User3</router-link>
        <router-link to="/register">Register</router-link>
        <!-- 路由占位符 -->
        <router-view></router-view>
    </div>

6.vue-router编程式导航

6.1 页面导航的两种方式

声明式导航:通过点击链接实现导航方式,叫声明式导航
例如:普通网页中的链接或者vue中的

编程式导航:通过调用javascript形式的API实现导航的方式,叫做编程式导航
例如:普通网页中的location.href

6.1.1 编程式导航基本用法

常用的编程序导航API如下
this. r o u t e r . p u s h ( ′ h a s h 地 址 ′ ) t h i s . router.push('hash地址') this. router.push(hash)this.router.go(n)
在这里插入图片描述this.$router.push()的调用

const User = {
            props: ['id','uname','age'],
            template: `<div>
                <h1>User组件 --用户的id{{id}}和名字{{uname}}和年龄{{age}}</h1>
                <button @click="goRegister">跳转到注册页面</button>
                </div>`,
                methods: {
                    goRegister() {
                        this.$router.push('/register')
                    }
                },
        }  

this.$router.go()使用

const Register = {
            template: `<div>
                <h1>Register组件</h1>
                <button @click="goBack">后退</button>
                </div>`,
                methods: {
                    goBack() {
                        this.$router.go(-1)
                    }
                }
        }

router.push()方法参数规则
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值