Table of Contents
1. What is a navigation guard?
2. What types of navigation guards are there?
1. Global guards (3)
Global front guard
Global resolution guard
Global post-hook
2. Route exclusive guard (1)
3. Three parameters of the navigation guard
4. How to use beforeRouteEnter in vue3
Five. Simulated login registration case
Home Web Front-end Vue.js How to use navigation guards in Vue3

How to use navigation guards in Vue3

May 16, 2023 pm 06:58 PM
vue3

    1. What is a navigation guard?

    As its name suggests, the navigation guard provided by vue-router is mainly used to guard navigation by jumping or canceling. There are many ways to build route navigation into it: globally, exclusive to a single route, or at the component level.

    Check the following situation:

    By default, clicking the homepage link can directly enter the specified interface, but this interface requires the user to log in before accessing, which is a problem

    How to use navigation guards in Vue3

    Navigation guards can be set up to detect whether the user is logged in. If he is logged in, he will enter the background page. If he is not logged in, he will force himself to enter the login page, as shown in the figure

    How to use navigation guards in Vue3

    2. What types of navigation guards are there?

    1. Global guards (3)

    Global front guard

    Every time a routing navigation jump occurs, the global front guard will be triggered. Therefore, in the global front guard, programmers can control the access rights of each route

    1. How to use

    You can router/index.js Use router.beforeEach((to, from, next) => {}) in the page to register a global front guard.

    2. Code:

    // router/index.js 页面
    
    router.beforeEach((to, from, next) => {
        console.log(to, from);
        next()
    });
    Copy after login
    Global resolution guard
    1. Usage method
    You can use router.beforeResolve to register a global guard. This is similar to router.beforeEach in that it fires on every navigation, but ensures that the parsing guard is called correctly before the navigation is confirmed, and after all in-component guards and async route components are parsed.

    2. Code:

    // router/index.js 页面
    
    router.beforeResolve((to, from, next) => {
        console.log(to,from);
        next()
    })
    Copy after login
    Global post-hook
    1. Usage
    You can also register a global post-hook, however Unlike guards, these hooks will not accept the next function nor change the navigation itself:

    2. Code:

    // router/index.js 页面
    
    router.afterEach((to, from) => {
        console.log(to,from);
    })
    Copy after login

    They are useful for auxiliary functions such as analysis, changing page titles, and declaring pages. Useful for many other things.

    2. Route exclusive guard (1)

    1. Usage method

    You can define it directly in the routing configurationbeforeEnter Guard:

    2. Code:

    // router/index.js 页面(路由规则中)
    
    const routes = [
    	{
    	    path: '/home',
    	    name: 'Home',
    	    component: HomeView,
    	    beforeEnter: (to, from,next) => {
    	        console.log(to, from);
    	        next()
    	    },
    	}, 
    ]
    Copy after login

    3. Guards within the component (3)

    Component There are three internal guards: beforeRouteEnter before the route enters, beforeRouteLeave when the route leaves, and beforeRouteUpdate when the page is updated

    beforeRouteEnter(to, from, next)

    1. How to use
    in the component Used in templates, written at the same level as methods: {}, component routing guards are routing guards written in each separate vue file

    2. Code:

    // vue 组件内使用
    
    onBeforeRouteUpdate((to, from) => {
      //当前组件路由改变后,进行触发
      console.log(to);
    });
    Copy after login
    Copy after login
    Note: in vue3 The beforeRouterEnter route guard cannot be used in the setup function.

    beforeRouteUpdate(to, from, next)

    1. Usage method
    Use in the component template, with methods: {} is written at the same level. The component route guard is the route guard written in each separate vue file

    2. Code:

    // vue 组件内使用
    
    onBeforeRouteUpdate((to, from) => {
      //当前组件路由改变后,进行触发
      console.log(to);
    });
    Copy after login
    Copy after login

    beforeRouteLeave(to, from, next)

    1. The usage method is used in the component template, which is written at the same level as methods: {}. The component routing guard is the routing guard written in each separate vue file

    2. Code:

    // vue 组件内使用
    
    onBeforeRouteLeave((to, from) => {
      //离开当前的组件,触发
      alert("我离开啦");
    });
    Copy after login

    3. Three parameters of the navigation guard

    • to: The routing information object to be accessed

    • from: The one to be left Routing information object

    • next: Function

      Call next() to indicate release, allow this route navigation

      Call next(false) to indicate no release , this route navigation is not allowed

      Calling next({routerPath}) means navigating to this address. Generally, when the user is not logged in, he will navigate to the login interface

    Tip: This function can appear multiple times in the navigation guard, but can only be called once!!!

    How to use navigation guards in Vue3

    4. How to use beforeRouteEnter in vue3

    If you are using the combined API and setup functions to write components, you can add update and leave guards through onBeforeRouteUpdate and onBeforeRouteLeave respectively. Please refer to the Composition API section for more details.

    For details, please see the official documentation of vue-router
    Navigation Guard | Vue Router

    Method 1. We can use The beforeEnter method intercepts, that is, in router.js:

    {
    	path: '/',
    	name: 'home
    	component: () => import('@/xxx.vue'),
    	beforeEnter: (to, from) => {
    		// 可以在定义路由的时候监听from和to
    	}
    }
    Copy after login

    Method 2. We can also use the vue2 writing method and use the optional api to use the beforeRouterEnter hook.

    <script>
    export default {
    	beforeRouteEnter(to, from) {
    		console.log(&#39;before router enter&#39;, to, from)
    	},
    	mounted() {
    		console.log(&#39;mounted&#39;)
    	},
    }
    Copy after login

    Five. Simulated login registration case

    // 模拟是否登录(true为登录,false为未登录)
    let token = true
    router.beforeEach((to, from, next) => {
        // 判断有没有登录
        if (!token) {
        	// 如果没有登录,并且是跳转至登录页
            if (to.name == "Login") {
            	// 直接跳转
                next();
            } else {
            	// 否则直接强制跳转至登录页
                router.push(&#39;/login&#39;)
            }
        } else {
        	// 如果已经登录,并且不是跳转至登录页
            if (to.name !== "Login") {
            	// 直接跳转
                next();
            } else {
            	// 否则直接强制跳转至上一个页面
                router.push(from.path)
            }
        }
    });
    Copy after login

    The above is the detailed content of How to use navigation guards in Vue3. For more information, please follow other related articles on the PHP Chinese website!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot Article Tags

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    How to use tinymce in vue3 project How to use tinymce in vue3 project May 19, 2023 pm 08:40 PM

    How to use tinymce in vue3 project

    vue3+vite: How to solve the error when using require to dynamically import images in src vue3+vite: How to solve the error when using require to dynamically import images in src May 21, 2023 pm 03:16 PM

    vue3+vite: How to solve the error when using require to dynamically import images in src

    How Vue3 parses markdown and implements code highlighting How Vue3 parses markdown and implements code highlighting May 20, 2023 pm 04:16 PM

    How Vue3 parses markdown and implements code highlighting

    How to refresh partial content of the page in Vue3 How to refresh partial content of the page in Vue3 May 26, 2023 pm 05:31 PM

    How to refresh partial content of the page in Vue3

    How to solve the problem that after the vue3 project is packaged and published to the server, the access page displays blank How to solve the problem that after the vue3 project is packaged and published to the server, the access page displays blank May 17, 2023 am 08:19 AM

    How to solve the problem that after the vue3 project is packaged and published to the server, the access page displays blank

    How to use Vue3 reusable components How to use Vue3 reusable components May 20, 2023 pm 07:25 PM

    How to use Vue3 reusable components

    How to use defineCustomElement to define components in Vue3 How to use defineCustomElement to define components in Vue3 May 28, 2023 am 11:29 AM

    How to use defineCustomElement to define components in Vue3

    How to select an avatar and crop it in Vue3 How to select an avatar and crop it in Vue3 May 29, 2023 am 10:22 AM

    How to select an avatar and crop it in Vue3

    See all articles