vue中的全局解析守卫有什么作用?

2021-02-01 09:49发布

6条回答
R了个C
2楼 · 2021-02-01 16:42

导航守卫的作用:vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。项目中应用场景举例:路由页面跳转时候进行登陆验证;路由跳转判断;有多种机会植入路由导航过程中:全局路由, 单个路由独享的, 或者组件级的。

全局守卫包括:router.beforeEach(是全局前置守卫)、router.beforeResolve(是全局解析守卫)、router.afterEach(是全局后置钩子),单个路由独享的导航守卫:在路由配置上直接定义 beforeEnter 守卫,组件内守卫包括:在组件内定义路由的导航守卫,有beforeRouteEnter 、beforeRouteUpdate 、beforeRouteLeave


studentaaa
3楼 · 2021-02-02 11:07

在实际项目中,路由跳转前做一些验证,比如登录验证,是网站中的普遍需求。举个例子,我们通常使用 router.beforeEach 注册一个全局前置守卫用来判断登录的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
let routesArr = [{
        path: '/home',
        name:"home",
        //redirect:"/about",//重定向
        //alias: '/index',//别名
        component: {
        template: `
                

这是首页

                        
`              
            }
            }, {
            path: '/about',
            name:'about',
            component: {
            template: `
                            

这是关于我们页

                        
`
            }
                    }, {
            path: '/user/:name'// :name的作用是动态访问一个地址,比如传进来的是张三,就显示张三的信息
            name: 'user'// 这个name的作用是配合第95行添加属性用的,二者必须一致
            component: {
            template: `
 
                            
                            

我叫:{{ $route.params.name }}

 
                            
                            

我今年:{{ $route.query.age }} 岁了

 
                            
                                
                                "more" append> 更多信息
                            
                             
                            
                            
                        
`
                },
                children: [{
                path: 'more',
                component: {
                template: `
                                
                                用户:{{ $route.params.name }} 的详细信息 abcd1234
                                
`
                }
                }]
                }
 
                ];
 
                const vRouter = new VueRouter({
                    routes: routesArr // 这里要写routes ,而不是routers,不然 没数据
                })

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vRouter.beforeEach((to, from, next) => {
    //这里写你的判断逻辑
    const nextRoute = ['home''good-list''good-detail''cart''profile'];//需要登陆的页面名
    let isLogin=  localEvent.get('web_login')||false;//获取是否登录状态
    // 未登录状态;当路由到nextRoute指定页时,跳转至login
    if (nextRoute.indexOf(to.name) > -1) { 
      if (!isLogin) {
        //router.push({ name: 'login' });//可以直接跳转名
        //next({ path: '/login', query: { redirect: to.fullPath } });//也可以跳转路径,并带上重定向
      }
    }
    // 已登录状态;当路由到login时,跳转至home
    if (to.name === 'login') {
      if (isLogin) {
        router.push({ name: 'home' });
      }
    }
    next();
});



爱梦 - 拿来吧你
4楼 · 2021-11-23 09:46

全局守卫

你可以使用 router.beforeEach 注册一个全局前置守卫:

1 const router = new VueRouter({ ... })2 3 router.beforeEach((to, from, next) => {4 // ...5 })

当一个导航触发时,全局前置守卫按照创建顺序调用。守卫是异步解析执行,此时导航在所有守卫 resolve 完之前一直处于 等待中。

每个守卫方法接收三个参数:

to: Route: 即将要进入的目标 路由对象

from: Route: 当前导航正要离开的路由

next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保要调用 next 方法,否则钩子就不会被 resolved。


汽水味的小盆友
5楼 · 2021-11-24 14:08

1.(路由守卫用来监控登录页面,如果未登录就不让跳转列表)

      导航守卫:提供的导航守卫主要用来通过跳转或取消的方式守卫导航

      1.全局守卫:管路由匹配哪一个地址,都会触发

      2.路由独享守卫 beforeEnter 

      3.组件独享守卫 beforeRouteEnter、beforeRouteUpdate、beforeLeave


2.三个参数:

      to:将要跳转的路由对象(参数)我是谁

      from:从哪个路由来的(存储的也是路由对象)我从哪里来

      next:向下执行,不执行,不继续,我要干什么


3.分为前置和后置守卫:

      前置守卫:beforeEach 路由跳转前的生命周期

      后置守卫:afterEach 路由跳转后的生命周期


4.组件内的守卫:

      进入组件之前的生命周期:beforeRouterEnter

      路由发生变化的生命周期:beforeRouterUpdate

      路由立开的生命周期:beforeRouterLeave


5.按需加载路由:

      vue的路由中router下的index.js:可以写按需加载路由

      例子:[{path:'/home',name:'home',component:()=>import('../hezi/home.vue')}]

      优点:不占用内存,提高性能,提高用户体验度。

超甜的布丁
6楼 · 2021-11-24 15:57

全局守卫:

router.beforeEach((to, form, next) => {

console.log('全局前置守卫 beforeEach')

next()

})

router.beforeResolve((to, form, next) => {

console.log('全局解析守卫 beforeResolve')

next()

})

router.afterEach((to, form) => {

console.log('全局后置守卫 afterEach')

})

路由独享守卫:

{

path: '/list',

name: 'list',

alias: '/aaa',

component: () => import('@views/List'),

children: [

{

path: ':id',

name: 'details',

component: () => import('@views/Details'),

props: true,

beforeEnter: (to, from, next) => {

console.log('路由独享守卫 beforeEnter')

next()

}

}

]

}

组件内守卫:

beforeRouteEnter(to, from, next) {

console.log('组件内路由前置守卫 beforeRouteEnter', this) // 访问不到this

next((vm) => {

console.log('组件内路由前置守卫 vm', vm) // vm 就是this

})

},

beforeRouteUpdate(to, from, next) {

console.log('组件内路由更新守卫 beforeRouteUpdate')

next()

},

beforeRouteLeave(to, from, next) {

console.log('组件内路由离开守卫 beforeRouteLeave', this)

next()

}


是开心果呀 - 热爱生活
7楼 · 2021-11-25 14:07

全局守卫:前置守卫例子
前置守卫:是跳转之前路由的守卫
必须用一个变量接收它。

全局:前置守卫可以做判断登录,如果没有登录就不让跳转到这个页面

局守卫:后置守卫的例子
后置守卫:跳转之后路由的守卫

相关问题推荐

  • 回答 120

    相对前几年来说,要高上不少了,毕竟入行的人也是越来越多了,基础的工作对应想要参与的人群基数越来越大,但是对于高端人才的需求还是很多,人才还是相对稀缺性的。所以,想要学web或者其他技术也一样,别等,别观望。web前端就业方向特别多包括web前端开发...

  • 回答 25

    相对定位和绝对定位是定位的两种表现形式,区别如下:一、主体不同1、相对定位:是设置为相对定位的元素框会偏移某个距离。2、绝对定位:absolute 脱离文档流,通过 top,bottom,left,right 定位。二、特点不同1、相对定位:在使用相对定位时,无论是否进行移...

  • 抓包是什么意思?2020-04-01 17:36
    回答 7
    已采纳

    抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。抓包可以通过抓包工具来查看网络数据包内容。通过对抓获的数据包进行分析,可以得到有用的信息。目前流行的...

  • 回答 89

    常用的前端框架有Bootstrap框架、React框架、Vue框架、Angular框架、Foundation框架等等

  • 回答 65
    已采纳

    前端是目的就业前景非常不错的一个计算机技术,但是自学的话还是有一定难度的,网络上自学是碎片化的,同时互联网技术跟新换代快,自己的话比较吃力也学习不到最新的技术。

  • SSR 是什么意思?2020-03-20 18:56
    回答 6

    SSR就是一台服务器,可以利用 SSR 在远程的服务器上配置 SSR,使其能够成为 SSR 节点,这样本地电脑或者其它设备利用 SSR 节点实现 VPN 或者远程上网及游戏加速等方面。ShadowsocksR(简称 SSR)是 Shadowsocks 分支,在 Shadowsocks 的基础上增加了一些数据...

  • 回答 52
    已采纳

    计算机培训方向比较多,建议找适合自己的方向选择培训编程类:JAVA、WEB、Python、C/C++、C#等测试类:软件测试运维类:云计算、网络安全设计类:UI设计、3D建模等

  • 回答 11

    1、代码判断xAxis: {type: 'time',splitLine: {show: false},interval: 3600, // 设置x轴时间间隔axisLabel: {formatter: function(value, index) {return liangTools.unix2hm(value)}}},首先要把xAxis 显示类型设置成time,然后设置对应X轴......

  • 回答 8

    HTML5 + CSS + JavaScript 开发 跨平台重用代码 

  • 回答 4

    采用rem单位自动响应,并提供独有栅格化系统快速定义宽高、边距节省css代码量,同时总结各大型移动端网页,提供一套ui颜色搭配规范,尺寸规范,字体规范等。

  • 回答 10

    iView UI、ioni、SUI

  • 回答 6

     jQTouch 

  • 回答 4

    如果只是普通的移动端用vue react 或者dva 如果是要编译成小程序什么的或者混生 就用uni-app(对应vue语法)taro(对应react) 或者纯原生 这个没有限制的,自己怎么舒服怎么来

  • 回答 4

    因为可以运用在网页和小程序的开饭中,而且开源,用着便宜,企业都很喜欢

  • 回答 10

    一、Visual Studio Code下载地址:https://code.visualstudio.com/微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Mac OS X、Windows和 Linux 之上的,针对于编写现代 Web 和云应用的跨平台源代码编辑器。Visual Stud...

  • 回答 9

    jQuery自带淡入淡出效果 https://www.w3school.com.cn/jquery/jquery_fade.asp 看看这个 

没有解决我的问题,去提问