成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

如何在Vue中設(shè)置全局路由守衛(wèi)

Vue.js是一款流行的JavaScript框架,被廣泛用于構(gòu)建現(xiàn)代單頁(yè)應(yīng)用程序。而在使用Vue.js開(kāi)發(fā)應(yīng)用程序時(shí),我們經(jīng)常需要對(duì)路由進(jìn)行控制。因此,在本文中,我們將重點(diǎn)介紹如何在Vue.js中設(shè)置

Vue.js是一款流行的JavaScript框架,被廣泛用于構(gòu)建現(xiàn)代單頁(yè)應(yīng)用程序。而在使用Vue.js開(kāi)發(fā)應(yīng)用程序時(shí),我們經(jīng)常需要對(duì)路由進(jìn)行控制。因此,在本文中,我們將重點(diǎn)介紹如何在Vue.js中設(shè)置全局路由守衛(wèi)。

1. 回調(diào)函數(shù)中的參數(shù)

在Vue.js中,路由守衛(wèi)是在路由切換過(guò)程中執(zhí)行的回調(diào)函數(shù)。這些回調(diào)函數(shù)會(huì)接收三個(gè)參數(shù):to、from和next。

其中,to參數(shù)表示要進(jìn)入的路由路徑,而from參數(shù)表示要離開(kāi)的路由路徑。而最后一個(gè)參數(shù)next,是一個(gè)函數(shù),它決定是否展示你要看到的路由頁(yè)面。如果你不調(diào)用next()函數(shù),路由將無(wú)法正常跳轉(zhuǎn)。

2. 在main.js中設(shè)置全局守衛(wèi)

在Vue.js中,我們可以通過(guò)在main.js文件中實(shí)例化一個(gè)路由對(duì)象來(lái)設(shè)置全局守衛(wèi)。例如:

```

import Vue from 'vue'

import App from ''

import router from './router'

false

((to, from, next) > {

// 進(jìn)行路由守衛(wèi)的邏輯判斷

})

new Vue({

router,

render: h > h(App),

}).$mount('app')

```

在上面的代碼中,我們通過(guò)調(diào)用`()`函數(shù)來(lái)設(shè)置全局路由守衛(wèi)。這個(gè)函數(shù)接收一個(gè)回調(diào)函數(shù)作為參數(shù),該函數(shù)將被調(diào)用每次當(dāng)路由發(fā)生變化時(shí)。

3. 判斷當(dāng)前將要進(jìn)入的路徑是否為登錄或注冊(cè)

在實(shí)現(xiàn)全局路由守衛(wèi)的回調(diào)函數(shù)中,我們需要編寫邏輯判斷語(yǔ)句。例如,可以通過(guò)判斷參數(shù)是否為登錄或注冊(cè)頁(yè)面,來(lái)判斷用戶是否已經(jīng)登錄。

```

((to, from, next) > {

// 判斷要訪問(wèn)的路由是否需要登錄權(quán)限

if () {

// 判斷是否已經(jīng)登錄

if (isLogin()) {

next()

} else {

// 如果沒(méi)有登錄,就跳轉(zhuǎn)到登錄頁(yè)面

next({

path: '/login',

query: { redirect: to.fullPath }

})

}

} else {

next()

}

})

```

在上面的代碼中,我們首先通過(guò)``屬性來(lái)判斷要訪問(wèn)的路由是否需要登錄權(quán)限。如果需要,我們就調(diào)用`isLogin()`函數(shù)來(lái)判斷用戶是否已經(jīng)登錄。如果已經(jīng)登錄,就調(diào)用`next()`函數(shù)來(lái)展示要訪問(wèn)的路由頁(yè)面。如果未登錄,則調(diào)用`next()`函數(shù)并傳遞登錄頁(yè)面的路由信息,以便用戶完成登錄之后,自動(dòng)跳轉(zhuǎn)到訪問(wèn)原來(lái)要訪問(wèn)的路由頁(yè)面。

4. 實(shí)現(xiàn)未登錄狀態(tài)下,展示登錄界面的效果

通過(guò)以上的方法,我們已經(jīng)可以實(shí)現(xiàn)在用戶未登錄狀態(tài)下,自動(dòng)跳轉(zhuǎn)到登錄界面。但是,如果我們希望在未登錄狀態(tài)下,始終展示的都是登錄界面,該怎么辦呢?

我們可以通過(guò)在路由守衛(wèi)回調(diào)函數(shù)中添加額外的判斷邏輯,來(lái)實(shí)現(xiàn)這個(gè)功能。

```

((to, from, next) > {

// 判斷是否登錄

const isLogin ('token') 'true' ? true : false

// 判斷要訪問(wèn)的路由是否需要登錄權(quán)限

if () {

// 如果已經(jīng)登錄,則展示要訪問(wèn)的路由頁(yè)面

if (isLogin) {

next()

} else {

// 如果未登錄,則展示登錄頁(yè)面

if ( '/login' || '/register') {

next()

} else {

next('/login')

}

}

} else {

next()

}

})

```

在上面的代碼中,我們首先通過(guò)調(diào)用`('token')`函數(shù)來(lái)獲取用戶登錄狀態(tài)。如果已經(jīng)登錄,則調(diào)用`next()`函數(shù)來(lái)展示要訪問(wèn)的路由頁(yè)面。如果未登錄,則調(diào)用`next()`函數(shù)并判斷當(dāng)前要訪問(wèn)的路徑是否為登錄或注冊(cè)頁(yè)面。如果是,就展示當(dāng)前界面。如果不是,則調(diào)用`next()`函數(shù)并跳轉(zhuǎn)到登錄頁(yè)面。

5. 每次切換路由時(shí)彈出alert提示框

有時(shí)候,我們需要在每次切換路由時(shí)彈出alert提示框。可以通過(guò)在路由守衛(wèi)回調(diào)函數(shù)中添加以下代碼實(shí)現(xiàn):

```

((to, from, next) > {

alert('切換路由')

next()

})

```

在上面的代碼中,我們直接調(diào)用`alert()`函數(shù)來(lái)彈出提示框。然后,通過(guò)調(diào)用`next()`函數(shù)來(lái)展示要訪問(wèn)的路由頁(yè)面。

6. 解決alert輸出hello undefined的問(wèn)題

最后,我們需要解決另一個(gè)問(wèn)題。即,在路由切換時(shí),可能會(huì)出現(xiàn)alert輸出"hello undefined"的情況。這是因?yàn)閍lert函數(shù)在渲染數(shù)據(jù)前就已經(jīng)調(diào)用了。

為了解決這個(gè)問(wèn)題,我們可以使用Vue.js提供的異步加載組件的特性。具體地,我們可以使用`component()`函數(shù)來(lái)加載一個(gè)異步組件,并在其回調(diào)函數(shù)中調(diào)用alert方法。

```

((to, from, next) > {

// 異步加載新組件

const component () > import('@/components/HelloWorld')

component().then(() > {

alert('切換路由')

next()

})

})

```

在上面的代碼中,我們首先通過(guò)調(diào)用`component()`函數(shù)來(lái)加載一個(gè)異步組件。然后,在其回調(diào)函數(shù)中調(diào)用alert方法,并通過(guò)調(diào)用`next()`函數(shù)來(lái)展示要訪問(wèn)的路由頁(yè)面。這樣,就可以解決alert輸出"hello undefined"的問(wèn)題了。

總結(jié)

本文介紹了在Vue.js中設(shè)置全局路由守衛(wèi)的方法。我們首先介紹了回調(diào)函數(shù)中的參數(shù),然后演示了如何在main.js中設(shè)置全局守衛(wèi)。接著,我們?cè)敿?xì)講解了如何判斷是否已經(jīng)登錄,以及如何實(shí)現(xiàn)未登錄狀態(tài)下的展示效果。最后,我們還解決了alert輸出"hello undefined"的問(wèn)題。

標(biāo)簽: