日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

vue学习之router

發布時間:2024/6/21 综合教程 24 生活家
生活随笔 收集整理的這篇文章主要介紹了 vue学习之router 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

路由文檔:https://router.vuejs.org/zh/guide/

使用vue做spa應用的話,一定會涉及到路由。

安裝

安裝router插件

npm install vue-router

router的基本使用步驟

引入router插件——>配置路由——>實例化路由——>根實例注冊路由——>頁面掛載路由節點

router.js編寫

在src下新建一個router.js, 接下來編寫這個router.js

引入router插件

實例化VueRouter

mode:

默認為hash,但是用hash模式的話,頁面地址會變成被加個#號比較難看了, http://localhost:8080/#/linkParams/xuxiao
所以一般我們會采用 history模式,它會使得我們的地址像平常一樣。http://localhost:8080/linkParams/xuxiao

base
應用的基路徑。例如,如果整個單頁應用服務在 /app/ 下,然后 base 就應該設為 "/app/"。
一般寫成 __dirname,在webpack中有配置。

routes
routes就是我們的大核心了,里面包含我們所有的頁面配置。

routes配置介紹

path 就是我們的訪問這個頁面的路徑
name 給這個頁面路徑定義一個名字,當在頁面進行跳轉的時候也可以用名字跳轉,要唯一喲
component 組件,就是咱們在最上面引入的 import ...了,當然這個組件的寫法還有一種懶加載

懶加載的方式,我們就不需要再用import去引入組件了,直接如下即可。懶加載的好處是當你訪問到這個頁面的時候才會去加載相關資源,這樣的話能提高頁面的訪問速度。
component: resolve => require(['./page/linkParamsQuestion.vue'], resolve)

在router.js文件末尾導出路由配置

緊接著在根實例注冊router

在app中掛載路由頁面

<div id="app">
  <h1>Hello App!</h1>
  <!-- 路由出口 -->
  <!-- 路由匹配到的組件將渲染在這里 -->
  <router-view></router-view>
</div>

頁面訪問

比如routes配置如下:

頁面訪問地址:

頁面跳轉

1、使用router-link,注意to的值要和router.js文件中配置的path一致

2、還可以在方法里利用 this.$router.push('xxx') 來進行跳轉。

// 字符串,這里的字符串是路徑path匹配噢,不是router配置里的name
this.$router.push('home')

// 對象
this.$router.push({ path: 'home' })

// 命名的路由 這里會變成 /user/123
this.$router.push({ name: 'user', params: { userId: 123 }})

// 帶查詢參數,變成 /register?plan=private
this.$router.push({ path: 'register', query: { plan: 'private' }})

動態路由

靜態路由:path中的路徑是寫死的

動態路由:能傳遞參數的路由模式,由于可以傳遞參數,所以其對應的路由數量是不確定的,故稱之為 動態路由

那么如何將參數作為路由呢?

在參數名前面加上 : ,然后將參數寫在路由的 path

routes: [
    //將頁面組件與path指令的路由關聯
    { name: 'BookInfo', path: '/books/:id', component: BookInfo }
  ]

這樣定義之后,vue-router就會匹配所有的:/books/1,/books/2,/books/3 ……,所以說這樣定義的路由的數量是不確定的。

如何給路由傳參呢?

1、在<router-link> 我們加入一個 params 屬性來指定具體的參數值

       <li>
          <router-link :to ="{name:'BookInfo',params :{id:1}}" >
            <div>首頁</div>
          </router-link>
        </li>

上面的鏈接對應就為:http://localhost:8080/__dirname/books/1

如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在params中對應的聲明參數值即可,vue-router只要匹配到路由模式的定義就會自動對參數進行分解取值
如 path: '/books/:version/:id',則對應params為:params :{id:1,version:1}

如何將這些參數讀取出來呢?

通過 $route.params這個屬性獲取指定的參數值

在相應的組件頁面內輸出參數值,對應代碼如下:

<p>當前圖書編號是:{{$route.params.id}}</p>

如果想在js代碼中根據參數值做相應的處理,則在默認路由中加入如下代碼:

export default {
  name: "app",
  created() {
    alert(this.$route.params.id);
  }
};

2、使用 "/path?param = value" 的方式傳遞參數

{ name: 'BookInfo', path: '/books/:id/?bookName=Lost', component: BookInfo }

使用 "/path?param = value" 的方式傳遞參數,可以使用$route.query.參數名 獲取參數值

獲取其中 bookName 的值的代碼為 this.$route.query.bookName

3、vue-router 還提供一種常量參數定義 meta(路由元信息),可以放一些key-value進去,方便在鉤子函數執行的時候用。我們可以在路由定義中先定義 meta 的值,然后在路由實例中通過$route.meta 參數獲取具體常量值。

{ name: 'BookInfo', path: '/books/:id', component: BookInfo ,meta: { bookName : 'Lost In River' }}

獲取其中 bookName 的值的代碼為 this.$route.meta.bookName

動態路由組件復用造成的問題

當使用路由參數的時候,如 從/books/1 到 /books/2 ,原來的組件實例會被復用,因為兩個路由都渲染同一個組件,比起銷毀后再創建,復用的銷率會更高。
這也就是說 組件的生命周期鉤子不會再被調用(組件沒有被銷毀后再創建) ,即 created mounted 等鉤子函數在頁面第二次加載的時候回失效。

那么,當復用組件時候,想對路由參數的變化做出響應的話,就需要在 $watch 對象內添加對 $route 對象變化的跟蹤函數

<script>
export default {
  name: "app",
  watch :{
    '$route' (to,from){
      alert(to.params.id);
    }
  }
};
</script>

路由鉤子

路由鉤子主要是給使用者在路由發生變化時進行一些特殊的處理而定義的,比如當路由跳轉前或跳轉后,進入、離開某一個路由前、后,就可以使用路由鉤子來監聽路由的變化。

鉤子函數根據其生效的范圍可以分為 全局鉤子函數路由獨享鉤子函數組件內鉤子函數

全局鉤子

直接在路由配置文件中寫的鉤子函數,在進入此路由配置時,可以做一些全局性的路由攔截。

router.beforeEach((to, from, next) => {
//會在任意路由跳轉前執行,next一定要記著執行,不然路由不能跳轉了
console.log('beforeEach')
console.log(to,from)
//
next()
})
//
router.afterEach((to, from) => {
//會在任意路由跳轉后執行
console.log('afterEach')
})

我們在params路由里配置了beforeEnter得鉤子函數,函數我們采用了ES6的箭頭函數,需要傳遞三個參數。我們并在箭頭函數中打印了to和from函數。具體打印內容可以在控制臺查看object。

三個參數:

to:路由將要跳轉的路徑信息,信息是包含在對像里邊的。
from:路徑跳轉前的路徑信息,也是一個對象的形式。
next:路由的控制參數,常用的有next(true)和next(false)。

next(false): 中斷當前的導航。如果瀏覽器的 URL 改變了(可能是用戶手動或者瀏覽器后退按鈕),那么 URL 地址會重置到 from 路由對應的地址。

next('/') 或者 next({ path: '/' }): 跳轉到一個不同的地址。當前的導航被中斷,然后進行一個新的導航。

某個路由獨享鉤子

就像說的一樣,給某個路由單獨使用的,本質上和后面的組件內鉤子是一樣的。都是特指的某個路由。不同的是,這里的一般定義在router當中,而不是在組件內。如下

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      beforeEnter: (to, from, next) => {
        // ...
      },
      beforeLeave: (to, from, next) => {
        // ...
      }
    }
  ]
})

組件內鉤子

更細粒度的路由攔截,只針對一個進入某一個組件的攔截。

首先看一下官方定義:

你可以在路由組件內直接定義以下路由導航鉤子
beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave

路由組件!路由組件!路由組件!重要的事情說三遍,大家一定要注意這里說的是“路由組件”,而路由組件!== 組件,路由組件!== 組件,路由組件!== 組件!之前一直沒注意這點,然后在子組件里面傻乎乎的調鉤子函數發現一直沒用。

我們先來看一下什么是路由組件?

路由組件:直接定義在router中component處的組件

也就是說router中定義的入口vue文件之外的組件,是沒有鉤子函數的,也就不用說使用了。但是如果你使用了并不會報錯,只是沒反應。

const Foo = {
  template: `...`,
  beforeRouteEnter (to, from, next) {
    // 在渲染該組件的對應路由被 confirm 前調用
    // 不!能!獲取組件實例 `this`
    // 因為當鉤子執行前,組件實例還沒被創建
...
next()
}, beforeRouteUpdate (to, from, next) { // 在當前路由改變,但是該組件被復用時調用 // 舉例來說,對于一個帶有動態參數的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉的時候, // 由于會渲染同樣的 Foo 組件,因此組件實例會被復用。而這個鉤子就會在這個情況下被調用。 // 可以訪問組件實例 `this`
...
next()
}, beforeRouteLeave (to, from, next) { // 導航離開該組件的對應路由時調用 // 可以訪問組件實例 `this`
...
next()
} }

鉤子函數使用場景

其實路由鉤子函數在項目開發中用的并不是非常多,一般用于登錄態的校驗,沒有登錄跳轉到登錄頁;權限的校驗等等。當然隨著項目的開發進展,也會有更多的功能可能用鉤子函數實現會更好,我們知道有鉤子函數這個好東西就行了,下次遇到問題腦海就能浮現,噢,這個功能用鉤子實現會比較棒。我們的目的就達到了。當然,有興趣的可以再去研究下源碼的實現。開啟下腦洞。

其他知識點

滾動行為

在利用vue-router去做跳轉的時候,到了新頁面如果對頁面的滾動條位置有要求的話,可以利用。

參考文章:

Vue.js 中的動態路由

Vue-Router模式、鉤子

Vue2.0 探索之路——vue-router入門教程和總結

vue里的路由鉤子

總結

以上是生活随笔為你收集整理的vue学习之router的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕视频 | 欧美人妻一区二区 | 成人av高清在线观看 | 国产网站黄色 | 亚洲一二三级 | 探花视频在线免费观看 | 日韩视频一区在线观看 | 九色视频在线播放 | 久久综合综合 | 人人射| 人人操日日干 | 日韩美女三级 | a v视频在线播放 | 日韩亚洲欧美一区二区三区 | 99综合 | 日韩欧美亚洲综合 | 大尺度做爰床戏呻吟舒畅 | 亚洲在线电影 | 久久天天东北熟女毛茸茸 | 看片在线观看 | www.av成人 | 丰满饥渴老女人hd | 亚洲人成7777| 巨乳美女被爆操 | 国产一区二区在线免费观看 | 先锋资源av在线 | 亚洲综合在线视频 | 视频在线看 | 美女黄页在线观看 | av免费在线电影 | 国产一区二区三区四区五区在线 | 小柔的淫辱日记(1~7) | 亚洲国产经典 | 秋霞午夜鲁丝一区二区老狼 | 色播网址| 人妻av一区二区 | av网在线 | 国产精品久久久久久精 | 天天色天天看 | 一本大道东京热无码aⅴ | 亚洲色图一区二区三区 | 六月婷婷中文字幕 | 天堂网av手机版 | 日本熟妇一区二区 | 色哟哟官网 | 亚洲国产精品av | 久久精品无码av | 91天堂素人 | 亚洲av男人的天堂在线观看 | 国产一区二区在线播放视频 | 国产精品无码AV无码国产 | 日日夜夜伊人 | 欧美成人免费在线观看视频 | 性高潮久久久久久 | 亚洲国产三区 | 91狠狠| 91麻豆成人精品国产 | 大尺度电影在线 | 变态另类丨国产精品 | av天天在线 | 一区二区三区欧美 | 久色影视 | 日本激情一区二区 | 小宵虎南在线观看 | 手机在线观看av片 | 自拍1页| 在线观看免费av网站 | 大桥未久恸哭の女教师 | 欧美日韩网站 | 欧美日韩不卡合集视频 | 日本亲与子乱xxx | 永久免费快色 | 手机看片福利视频 | 欧美视频在线免费 | 大陆农村乡下av | 精品视频一二区 | 国产又色又爽又黄 | 尤物av无码色av无码 | 欧美日韩成人一区二区在线观看 | 亚洲成人一区二区三区 | 男裸体无遮挡网站 | a视频| 99在线免费| www国产精品内射熟女 | 最新免费av网站 | 夜夜精品一区二区无码 | 午夜精品小视频 | 一级黄色大片免费观看 | 午夜插插插| 天天操欧美 | 7m精品福利视频导航 | 国产三级在线免费观看 | 午夜性激情 | 激情五月综合色婷婷一区二区 | 亚洲狼人天堂 | 麻豆三级在线观看 | 一级特黄aaa大片 | 91精品推荐 | 国产一级二级视频 |