亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue3.0?setup中使用vue-router問(wèn)題

 更新時(shí)間:2022年10月19日 10:51:57   作者:ratel?  
這篇文章主要介紹了vue3.0?setup中使用vue-router問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue3.0 setup中使用vue-router

在vue2.0中,我們通過(guò)this.$route可以獲取到當(dāng)前的路由,然后通過(guò)this.$router來(lái)獲取到路由實(shí)例來(lái)進(jìn)行路由跳轉(zhuǎn),但是在setup中,我們是無(wú)法拿到this的,這也意味著我們不能像vue2.0那樣去使用vue-router, 此時(shí)就需要像下面這樣去使用

import { useRoute, useRouter } from 'vue-router'
?
export default {
? setup() {
? ? // 獲取當(dāng)前路由
? ? const route = useRoute()
? ? // 獲取路由實(shí)例
? ? const router = useRouter()
? ? // 當(dāng)前路由發(fā)生變化時(shí),調(diào)用回調(diào)函數(shù)
? ? watch(() => route, () => {
? ? ? // 回調(diào)函數(shù)
? ? }, {
? ? ? immediate: true,
? ? ? deep: true
? ? })
? ??
? ? // 路由跳轉(zhuǎn)
? ? function goHome() {
? ? ? router.push({
? ? ? ? path: '/home'
? ? ? })
? ? }
? ??
? ? return {
? ? ? goHome()
? ? }
? }
}

上面代碼使用watch來(lái)監(jiān)聽(tīng)路由是否發(fā)生變化,除了watch之外,也可以使用vue-router提供的生命周期函數(shù)

import { onBeforeRouteUpdate, useRoute } from 'vue-router'
export default {
? setup() {
? ? onBeforeRouteUpdate(() => {
? ? ? // 當(dāng)前路由發(fā)生變化時(shí),調(diào)用回調(diào)函數(shù)
? ? })
? }
}

除了onBeforeRouteUpdate之外 vue-router在路由離開(kāi)的時(shí)候也提供了一個(gè)生命周期鉤子函數(shù)

onBeforeRouteLeave(() => {
? ?console.log('當(dāng)前頁(yè)面路由離開(kāi)的時(shí)候調(diào)用')
})

vue-router4與vue3的setup使用

在 setup 中訪(fǎng)問(wèn)路由和當(dāng)前路由

因?yàn)槲覀冊(cè)?setup 里面沒(méi)有訪(fǎng)問(wèn) this,所以我們不能再直接訪(fǎng)問(wèn) this.router 或 this.route。

使用useRouter和useRoute來(lái)代替

import{ useRouter, useRoute} from ‘vue-router'
export default {
  setup() {
    const router = useRouter()
    const route = useRoute()
    function pushWithQuery(query) {
      router.push({
        name: 'search',
        query: {
          ...route.query,
        },
      })
    }
  },
}

route 對(duì)象是一個(gè)響應(yīng)式對(duì)象

所以它的任何屬性都可以被監(jiān)聽(tīng),但你應(yīng)該避免監(jiān)聽(tīng)整個(gè) route 對(duì)象。在大多數(shù)情況下,你應(yīng)該直接監(jiān)聽(tīng)你期望改變的參數(shù)。

import { useRoute } from 'vue-router'
import { ref, watch } from 'vue'
export default {
  setup() {
    const route = useRoute()
    const userData = ref()
    // 當(dāng)參數(shù)更改時(shí)獲取用戶(hù)信息
    watch(
      () => route.params.id,
      async newId => {
        userData.value = await fetchUser(newId)
      }
    )
  },
}

請(qǐng)注意,在模板中我們仍然可以訪(fǎng)問(wèn) $router 和 $route,所以不需要在 setup 中返回 router 或 route。

導(dǎo)航守衛(wèi)

Vue Router 將更新和離開(kāi)守衛(wèi)作為 組合式 API 函數(shù)公開(kāi)

import { onBeforeRouteLeave, onBeforeRouteUpdate } from 'vue-router'
import { ref } from 'vue'
export default {
  setup() {
    // 與 beforeRouteLeave 相同,無(wú)法訪(fǎng)問(wèn) `this`
    onBeforeRouteLeave((to, from) => {
      const answer = window.confirm(
        'Do you really want to leave? you have unsaved changes!'
      )
      // 取消導(dǎo)航并停留在同一頁(yè)面上
      if (!answer) return false
    })
    const userData = ref()
    // 與 beforeRouteUpdate 相同,無(wú)法訪(fǎng)問(wèn) `this`
    onBeforeRouteUpdate(async (to, from) => {
      //僅當(dāng) id 更改時(shí)才獲取用戶(hù),例如僅 query 或 hash 值已更改
      if (to.params.id !== from.params.id) {
        userData.value = await fetchUser(to.params.id)
      }
    })
  },
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 加載 vue 遠(yuǎn)程代碼的組件實(shí)例詳解

    加載 vue 遠(yuǎn)程代碼的組件實(shí)例詳解

    vue-cli 作為 Vue 官方推薦的項(xiàng)目構(gòu)建腳手架,它提供了開(kāi)發(fā)過(guò)程中常用的,熱重載,構(gòu)建,調(diào)試,單元測(cè)試,代碼檢測(cè)等功能。我們本次的異步遠(yuǎn)端組件將基于 vue-cli 開(kāi)發(fā)
    2017-11-11
  • Element el-table 表格使用詳解

    Element el-table 表格使用詳解

    我們的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),不就是以表格的形式存在嗎,所以在界面上顯示、操作,使用表格來(lái)處理也是非常合理的,這篇文章給大家介紹Element el-table 表格使用方法,感興趣的朋友一起看看吧
    2024-03-03
  • vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng)

    vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng)

    這篇文章主要介紹了vue中實(shí)現(xiàn)可編輯table及其中加入下拉選項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue2.0實(shí)現(xiàn)選項(xiàng)卡導(dǎo)航效果

    vue2.0實(shí)現(xiàn)選項(xiàng)卡導(dǎo)航效果

    這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)現(xiàn)選項(xiàng)卡導(dǎo)航效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • el-input限制輸入正整數(shù)的兩種實(shí)現(xiàn)方式

    el-input限制輸入正整數(shù)的兩種實(shí)現(xiàn)方式

    el-input框是Element UI庫(kù)中的一個(gè)輸入框組件,用于接收用戶(hù)的輸入,這篇文章主要介紹了el-input限制輸入正整數(shù),需要的朋友可以參考下
    2024-02-02
  • Vue中非父子組件通信的方法小結(jié)

    Vue中非父子組件通信的方法小結(jié)

    在Vue.js中,組件間的通信是構(gòu)建復(fù)雜應(yīng)用的關(guān)鍵,但當(dāng)涉及到非父子關(guān)系的組件通信時(shí),傳統(tǒng)的做法就顯得力不從心了,本文將深入探討幾種有效的非父子組件通信方法,并通過(guò)具體的代碼示例來(lái)幫助讀者理解和應(yīng)用這些技術(shù),需要的朋友可以參考下
    2024-09-09
  • vue如何實(shí)現(xiàn)簡(jiǎn)易流程圖

    vue如何實(shí)現(xiàn)簡(jiǎn)易流程圖

    這篇文章主要介紹了vue如何實(shí)現(xiàn)簡(jiǎn)易流程圖問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue 實(shí)現(xiàn)小程序或商品秒殺倒計(jì)時(shí)

    vue 實(shí)現(xiàn)小程序或商品秒殺倒計(jì)時(shí)

    這篇文章主要介紹了vue 實(shí)現(xiàn)倒計(jì)時(shí)秒殺的組件,緊接著通過(guò)實(shí)例代碼給大家介紹小程序或者vue商品秒殺倒計(jì)時(shí)功能,需要的朋友可以參考下
    2019-04-04
  • vue動(dòng)態(tài)添加路由后刷新頁(yè)面白屏問(wèn)題及解決

    vue動(dòng)態(tài)添加路由后刷新頁(yè)面白屏問(wèn)題及解決

    這篇文章主要介紹了vue動(dòng)態(tài)添加路由后刷新頁(yè)面白屏問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue日志之如何用select選中默認(rèn)值

    vue日志之如何用select選中默認(rèn)值

    這篇文章主要介紹了vue日志之如何select選中默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論