成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue-router 4,你真的熟練嗎?

開發 前端
雖然 vue-router 4 大多數 API 保持不變,但是在 vue3 中以插件形式存在,所以在使用時有一定的變化。接下來就學習學習它是如何使用的。

[[434466]]

雖然 vue-router 4 大多數 API 保持不變,但是在 vue3 中以插件形式存在,所以在使用時有一定的變化。接下來就學習學習它是如何使用的。

一、安裝并創建實例

安裝最新版本的 vue-router

  1. npm install vue-router@4  
  2.  
  3. 或 
  4.  
  5. yarn add vue-router@4 

 安裝完成之后,可以在 package.json 文件查看vue-router的版本

  1. "dependencies": { 
  2.  "vue""^3.2.16"
  3.  "vue-router""4" 
  4. }, 

 新建 router 文件夾,新建 index.js文件:

  1. import { createRouter,createWebHashHistory } from "vue-router"
  2.  
  3. const routes = [ 
  4.  { 
  5.   path:''
  6.   component:()=>import("../views/login/index.vue"
  7.  }, 
  8.  { 
  9.   path:'/home'
  10.   component:()=>import("../views/home/index.vue"
  11.  } 
  12.  
  13. const router = createRouter({ 
  14.  history:createWebHashHistory('/'), 
  15.  routes 
  16. }) 
  17.  
  18. export default router 

 然后在main.js 中引入 router 。

  1. import { createApp } from 'vue' 
  2. import App from './App.vue' 
  3. import router from "./router/index" 
  4.  
  5. const app = createApp(App) 
  6. app.use(router) 
  7. app.mount('#app'

 注意:之前 component 引入組件的時候,后邊可以省略 .vue 后綴,但在 vue-router 4這不能省略后綴,否則就報錯了。

二、vue-router4 新特性

2.1、動態路由

addRoute 動態添加路由時,有兩種情況,分別為:

  1. //動態添加路由--默認添加到根 
  2. router.addRoute({ 
  3.  path:'/my'
  4.  name:'my'
  5.  component:()=>import("../views/my/index.vue"
  6. }) 
  7.  
  8. //動態添加子路由 
  9. router.addRoute('my',{ 
  10.  path:'/info'
  11.  component:()=>import("../views/my/info.vue"
  12. }) 

 添加子路由時,第一個屬性值是父級路由的 name 屬性值。

2.2、與 composition 組合

在 事件中獲取 router ,進行路由跳轉等操作。

  1. <template> 
  2.   <button @click="backToHome">跳轉到首頁</button> 
  3. </template> 
  4.  
  5. <script> 
  6. import { useRouter } from "vue-router" 
  7. export default { 
  8.  setup(){ 
  9.   const router = useRouter() 
  10.   return
  11.    backToHome(){ 
  12.     router.push("/"
  13.    }, 
  14.   } 
  15.  } 
  16. </script> 

通過 useRouter 獲取到路由之后再進行操作。也可以對當前路由route進行操作。以下是監聽route.query的案例:

  1. <template> 
  2.   <div>監聽路由變化</div> 
  3. </template> 
  4.  
  5. <script> 
  6. import { useRouter,useRoute } from "vue-router" 
  7. import { watch } from "@vue/runtime-core" 
  8. export default { 
  9.  setup(){ 
  10.   const route = useRoute() 
  11.   //route時響應式對象,可監控變化 
  12.   watch(()=>route.query,query=>{ 
  13.    console.log('最新的',query) 
  14.   }) 
  15.  } 
  16. </script> 

三、導航守衛

導航守衛主要用來通過跳轉或取消的方式守衛導航,有很多種方式植入路由導航中:全局的、單個路由獨享的或者組件級的。

3.1、全局守衛

  1. router.beforeEach((to,from,next)=>{ 
  2.  console.log('全局前置守衛'); 
  3. }) 
  4. router.afterEach((to,from)=>{ 
  5.  console.log('全局后置鉤子'); 
  6. }) 

 與之前的使用都一樣,沒有任何變化。

3.2、路由獨享守衛

  1. router.addRoute({ 
  2.  path:'/my'
  3.  name:'my'
  4.  component:()=>import("../views/my/index.vue"), 
  5.  beforeEnter:(to,from)=>{ 
  6.   console.log('路由獨享守衛'); 
  7.  } 
  8. }) 

3.3、組件內的守衛

組件內的守衛與之前使用不同,vue-router4中,需要從vue-router內引入需要的插件。

  1. <script> 
  2. import {  onBeforeRouteLeave } from "vue-router" 
  3. export default { 
  4.  setup(){ 
  5.  onnBeforeRouteLeave((to,from)=>{ 
  6.   const answer = window.confirm('是否確認離開'
  7.   if(answer){ 
  8.    console.log('不離開'); 
  9.    return false 
  10.   } 
  11.   }) 
  12.  } 
  13. </script> 

四、vue-router4 發生破壞性變化

4.1、實例創建方式

  1. //以前創建方式 
  2. const router = new VueRouter({ 
  3.   
  4. }) 
  5. new Vue({ 
  6.  router, 
  7.  render:h=>h(App) 
  8. }).$mount("#app"
  9.  
  10. //vue-router4創建方式 
  11. import { createRouter } from "vue-router" 
  12. const router = createRouter({ 
  13.  
  14. }) 
  15. createApp(App).use(router).mount("#app"

4.2、模式聲明方式改變

  1. //之前 
  2. const router = new VueRouter({ 
  3.  mode:"hash" 
  4. }) 
  5.  
  6. //新的 
  7. import { createRouter, createWebHashHistory } from "vue-router" 
  8. const router = createRouter({ 
  9.  history:createWebHashHistory() 
  10. }) 

 之前的mode替換成了 history ,它的選項變化分別為:

  • history -> createWebHistory
  • hash -> createWebHashHistory
  • abstract -> createMemoryHistory

4.3、base屬性被合并

base 選項被移至 createWebHistory 中。

  1. //之前 
  2. const router = new VueRouter({ 
  3.  base:"/" 
  4. }) 
  5.  
  6. //新的 
  7. import { createRouter, createWebHashHistory } from "vue-router" 
  8. const router = createRouter({ 
  9.  history:createWebHashHistory('/'
  10. }) 

4.4、通配符 * 被取消

  1. //之前 
  2.  path:'*'
  3.  component:()=>import("../components/NotFound.vue"
  4.  
  5. //vue-router 4 
  6.  path:'/:pathMatch(.*)*'
  7.  component:()=>import("../components/NotFound.vue"
  8. //是一個正則表達式 

4.5、isReady() 替代 onReady

  1. //之前 
  2. router.onReady(onSuccess,onError)//成功和失敗回調 
  3.  
  4. //vue-router 4 
  5. router.isReady().then(()=>{ 
  6.  //成功 
  7. }).catch(err=>{ 
  8.  //失敗 
  9. }) 

4.6、scrollBehavior 變化

  1. const router = createRouter({ 
  2.  scrollBehavior(tofrom, savedPosition) { 
  3.   // 始終滾動到頂部 
  4.   return { top: 0, left:0 } 
  5.  }, 
  6. }) 
  7. //之前使用的{ x:0, y:0 } 替換成了 { top: 0, left:0 } 

4.7、keep-alive 和 transition 必須用在 router-view 內部

  1. //之前 
  2. <keep-alive> 
  3.  <router-view /> 
  4. </keep-alive> 
  5.  
  6. //vue-router 4 
  7. <router-view v-slot="{component}"
  8.  <keep-alive> 
  9.   <component :is="component" /> 
  10.  </keep-alive> 
  11. </router-view

4.8、router-link 移除了一部分屬性

移除 append 屬性

  1. //之前 
  2. <router-link to="child" append >跳轉<router-link> 
  3.  
  4. //vue-router 4 
  5. <router-link :to="append( $route.path , 'child' )" append >跳轉<router-link> 

tag 被移除

  1. //之前 
  2. <router-link to="/" tag="span">跳轉</router-link> 
  3.  
  4. //vue-router 4 
  5. <router-link to="/" custom> 
  6.  <span>跳轉</span>   
  7. </router-link> 

event 被移除

4.9、route 的 parent 屬性被移除

4.10、pathToRegexpOptions選項被移除,其他內容替換

4.11、routes選項是必填項

4.12、跳轉不存在的命名路由報錯

之前跳轉到不存在的路由,頁面是空的,會重定向根路徑,這是不合理的,所以vue3報錯了。

4.13、缺少必填參數會拋出異常

4.14、命名子路由如果 path 為空的時候,不再追加 /

之前生成的 url 會自動追加一個 / ,如:"/dash/"。副作用:給設置了 redirect 選項的子路由帶來副作用。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-12-14 19:40:07

Node路由Vue

2019-07-11 10:45:34

MQ中間件 API

2022-02-02 21:29:39

路由模式Vue-Router

2022-02-16 08:45:55

Vue-Router權限管理系統權限驗證

2022-06-24 07:15:53

Vuehistory模式

2016-06-01 15:42:58

Hadoop數據管理分布式

2020-04-17 14:25:22

Kubernetes應用程序軟件開發

2022-07-26 00:00:22

HTAP系統數據庫

2014-04-17 16:42:03

DevOps

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2022-08-15 10:42:50

千兆網絡千兆光纖

2021-04-23 07:27:31

內存分配CPU

2021-10-15 10:27:42

變量命名

2014-11-28 10:31:07

Hybrid APP

2023-03-16 10:49:55

2020-02-27 10:49:26

HTTPS網絡協議TCP

2017-11-02 16:03:12

2019-09-16 08:40:42

2012-10-24 10:16:17

IT工程師云計算網絡管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产乱码久久久久久影片 | 一区二区高清不卡 | 天堂一区 | 日本成人福利视频 | 亚洲综合区 | 精品国产一区二区在线 | 午夜精品久久久久久久久久久久 | 国产精品毛片一区二区三区 | 真人毛片 | 欧美狠狠操 | 日韩av免费在线电影 | 日韩精品网站 | 日韩成人在线播放 | 天天综合国产 | 亚洲精品日韩综合观看成人91 | 久久久2o19精品| 国产精品无码永久免费888 | 手机在线一区二区三区 | 9porny九色视频自拍 | 国产综合精品 | 色嗨嗨| 日本精品一区二区 | 蜜桃在线视频 | 999久久久| 欧美黄在线观看 | 日本精品视频在线 | 国产九一精品 | 888久久久| 欧美精 | 国产偷久久一级精品60部 | 国产日韩欧美在线观看 | 久久精品国产一区 | 亚洲一区国产精品 | 日韩精品免费 | 99久久久久久99国产精品免 | 亚洲欧美视频 | 久久乐国产精品 | 日韩在线精品视频 | 男女啪啪高潮无遮挡免费动态 | 视频在线观看一区 | 午夜免费小视频 |