聊聊Vue2和Vue3中怎麼設定404介面

2023-02-18 14:00:32

本篇文章帶大家進行Vue學習,聊聊Vue2和Vue3中設定404介面的方法,希望對大家有所幫助!

vue頁面中,如果跳轉了不存在的路由那麼,那麼頁面就會出現白屏狀態,為了解決這個問題,我們可以自己寫一個404介面,讓其跳轉過去。

一.vue2

1.index.js

在此檔案中,一般存放的都是我們的路由資訊,我們經常使用path:'*'來進行捕獲我們的路由,度過不存在那麼我們就讓它進行跳轉至我們自定義的404頁面。

import Vue from 'vue'
import Router from 'vue-router'
import Homepage from '@/components/Homepage'
Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      component: Homepage,
    },
    {
      path:'*',
      component:()=>import('../views/404.vue')
    }
  ]
})
登入後複製

注意:這個path一定要寫在最外面。【相關推薦:、】

2.404.vue頁面

這個頁面通常我們可以自定義,一般包括跳轉某個頁面的超連結或者就是定時多長時間進行跳轉。

<template>
    <div>
        <p>
            頁面將在<span>{{ time }}</span>秒後自動跳轉首頁,<br>
            您也可以點選這裡跳轉<a href="/">首頁</a>
        </p>
    </div>
</template>

<script>
// 這裡可以匯入其他檔案(比如:元件,工具js,第三方外掛js,json檔案,圖片檔案等等)

export default {
    name: '',
    components: {

    },
    // 定義屬性
    data() {
        return {
            time: '10',
            time_end: null
        }
    },
    // 計算屬性,會監聽依賴屬性值隨之變化
    computed: {},
    // 監控data中的資料變化
    watch: {},
    // 方法集合
    methods: {
        GoIndex() {
            let _t = 9
            this.time_end = setInterval(() => {
                if (_t !== 0) {
                    this.time = _t--;
                } else {
                    this.$router.replace('/')
                    clearTimeout(this.time_end)
                    this.time_end = null
                }
            }, 1000)
        }
    },
    // 生命週期 - 建立完成(可以存取當前this範例)
    created() {
        this.GoIndex()
    },
    // 生命週期 - 掛載完成(可以存取DOM元素)
    mounted() {

    },
    beforeCreate() { }, // 生命週期 - 建立之前
    beforeMount() { }, // 生命週期 - 掛載之前
    beforeUpdate() { }, // 生命週期 - 更新之前
    updated() { }, // 生命週期 - 更新之後
    beforeDestroy() { }, // 生命週期 - 銷燬之前
    destroyed() {
        clearTimeout(this.time_end)
        this.time_end = null
    }, // 生命週期 - 銷燬完成
    activated() { }, // 如果頁面有keep-alive快取功能,這個函數會觸發
}
</script>

<style scoped>
.not_found {
    width: 100%;
    height: 100%;
    background: url('../../static/img/404.gif') no-repeat;
    background-position: center;
    background-size: cover;

    p {
        position: absolute;
        top: 50%;
        left: 20%;
        transform: translate(-50%, 0);
        color: #fff;
        span{
            color: orange;
            font-family: '仿宋';
            font-size: 25px;
        }
        a {
            font-size: 30px;
            color: aqua;
            text-decoration: underline;
        }
    }
}
</style>
登入後複製

那麼實現的效果就如下圖所示:

在這裡插入圖片描述

404實現效果

二.vue3

為什麼要分開說呢?因為在vue3中我們進行如下設定:

 {
      path:'*',
      component:()=>import('../views/404.vue')
    }
登入後複製

會產生錯誤,錯誤資訊:Catch all routes ("*") must now be defined using a param with a custom regexp.,意思就是:現在必須使用與自定義Regexp的引數定義所有路由(「*」)。

那麼官方是這麼說的:

// plan on directly navigating to the not-found route using its name
{ path: '/:pathMatch(.*)*', name: 'not-found', component: NotFound },
// if you omit the last `*`, the `/` character in params will be encoded when resolving or pushing
{ path: '/:pathMatch(.*)', name: 'bad-not-found', component: NotFound },
登入後複製

那麼我們vue2中的index.js檔案中的程式碼就變成了如下:

...

export default new Router({
  routes: [
    ...,
    {
      path:'/:pathMatch(.*)*',
      component:()=>import('../views/404.vue')
    }
    //或者
     {
      path:'/:pathMatch(.*)',
      component:()=>import('../views/404.vue')
    }
  ]
})
登入後複製

(學習視訊分享:、)

以上就是聊聊Vue2和Vue3中怎麼設定404介面的詳細內容,更多請關注TW511.COM其它相關文章!