欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速掌握Vue Router使用方法

 更新時(shí)間:2023年01月09日 09:12:07   作者:酷爾。  
Vue Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,讓構(gòu)建單頁(yè)面應(yīng)用變得易如反掌。路由實(shí)際上就是可以理解為指向,就是我在頁(yè)面上點(diǎn)擊一個(gè)按鈕需要跳轉(zhuǎn)到對(duì)應(yīng)的頁(yè)面,這就是路由跳轉(zhuǎn)

本篇博客會(huì)介紹Vue中的VueRouter的基本使用,編程式路由導(dǎo)航增加了我們進(jìn)行路由跳轉(zhuǎn)的靈活性,緩存路由組件保障了我們使用路由時(shí)的便捷性,生命周期鉤子為我們切入切出路由時(shí)提供了初始化與善后的工作,路由守衛(wèi)保障了我們路由組件的安全性,路由工作模式會(huì)使我們理解為啥Vue項(xiàng)目中的路由會(huì)有一個(gè)#,通過(guò)本篇博客會(huì)讓大家快速掌握Vue中路由的基本使用。

一、編程式路由導(dǎo)航

作用:不借助<router-link> 實(shí)現(xiàn)路由跳轉(zhuǎn),讓路由跳轉(zhuǎn)更加靈活

具體編碼:

//$router的兩個(gè)API
this.$router.push({
   name:'xiangqing',
   	params:{
   		id:xxx,
   		title:xxx
   	}
})
this.$router.replace({
   name:'xiangqing',
   	params:{
   		id:xxx,
   		title:xxx
   	}
})
this.$router.forward() //前進(jìn)
this.$router.back() //后退
this.$router.go() //可前進(jìn)也可后退

二、緩存路由組件

在上一篇博客中也提到過(guò),路由對(duì)應(yīng)的組件隨著路由的切換來(lái)而被激活,隨著路由的切換走而失活被銷(xiāo)毀,在我們使用WebApp的時(shí)候當(dāng)然不希望這樣的事情發(fā)生,我們希望即使有路由的切換,也要保持原有的組件不被銷(xiāo)毀。而緩存路由組件技術(shù)就可以完美的解決這個(gè)問(wèn)題,只是在實(shí)現(xiàn)這一功能是會(huì)以一定的程序效率作為代價(jià)。下面咱們一起看一看如何實(shí)現(xiàn)路由對(duì)應(yīng)組件的?;睢J褂玫降臉?biāo)簽是<keep-alive include="News"> </keep-alive>。

作用:讓不展示的路由組件保持掛載,不被銷(xiāo)毀。

具體編碼:

<keep-alive include="News"> 
    <router-view></router-view>
</keep-alive>

三、兩個(gè)新的聲明周期鉤子

作用:路由組件所獨(dú)有的兩個(gè)鉤子,用于捕獲路由組件的激活狀態(tài)。

具體名字:

  • activated路由組件被激活時(shí)觸發(fā)。
  • deactivated路由組件失活時(shí)觸發(fā)。
<template>
  <ul>
    <li :style="{opacity}">歡迎學(xué)習(xí)Vue</li>
    <li v-for="p in messageList" :key="p.id">{{p.title}} <input type="text"></li>
  </ul>
</template>
<script>
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "News",
  props:['id','title'],
  data() {
    return {
      messageList: [
        { id: "001", title: "消息001" },
        { id: "002", title: "消息002" },
        { id: "003", title: "消息003" },
      ],
      opacity:1
    };
  },
  activated() {
  			// 開(kāi)啟一個(gè)定時(shí)器,調(diào)整組件透明度
			console.log('News組件被激活了')
			this.timer = setInterval(() => {
				console.log('@')
				this.opacity -= 0.01
				if(this.opacity <= 0) this.opacity = 1
			},16)
		},
  deactivated() {
  	  //關(guān)閉定時(shí)器
      console.log('News組件失活了')
      clearInterval(this.timer)
  },
};
</script>
<style>
</style>

四、路由守衛(wèi)

路由守衛(wèi)中可以進(jìn)行頁(yè)面權(quán)限的驗(yàn)證,沒(méi)有權(quán)限就沒(méi)有辦法進(jìn)入到相應(yīng)的頁(yè)面之中。

作用:對(duì)路由進(jìn)行權(quán)限控制

分類(lèi):全局守衛(wèi)、獨(dú)享守衛(wèi)、組件內(nèi)守衛(wèi)

全局守衛(wèi)(所有組件間路由跳轉(zhuǎn)時(shí)都需要經(jīng)過(guò)這兩個(gè)守衛(wèi)):

//全局前置守衛(wèi):初始化時(shí)執(zhí)行、每次路由切換前執(zhí)行
router.beforeEach((to,from,next)=>{
	console.log('beforeEach',to,from)
	if(to.meta.isAuth){ //判斷當(dāng)前路由是否需要進(jìn)行權(quán)限控制
		if(localStorage.getItem('school') === 'atguigu'){ //權(quán)限控制的具體規(guī)則
			next() //放行
		}else{
			alert('暫無(wú)權(quán)限查看')
			// next({name:'guanyu'})
		}
	}else{
		next() //放行
	}
})
//全局后置守衛(wèi):初始化時(shí)執(zhí)行、每次路由切換后執(zhí)行
router.afterEach((to,from)=>{
	console.log('afterEach',to,from)
	if(to.meta.title){ 
		document.title = to.meta.title //修改網(wǎng)頁(yè)的title
	}else{
		document.title = 'vue_test'
	}
})

上述兩個(gè)函數(shù),參數(shù)中都有from 與to,這兩個(gè)是路由守衛(wèi)中超級(jí)重要的角色,權(quán)限驗(yàn)證一般都有參照這兩個(gè)參數(shù)進(jìn)行。

除此之外前置守衛(wèi)還有一個(gè)next參數(shù),這個(gè)參數(shù)負(fù)責(zé)放行??煽偨Y(jié)如下:

  • from:原始路由的一些基本信息
  • to:將要跳轉(zhuǎn)的路由基本信息
  • next:如果不傳參數(shù)為放行,就是跳轉(zhuǎn)到to指定的路由,如果傳參就跳轉(zhuǎn)到參數(shù)指定的路由next(“/login”)

4.獨(dú)享守衛(wèi):這種守衛(wèi)方式只針對(duì)包含特定屬性的路由起作用例如下面一個(gè)例子,前置路由守衛(wèi),只有要跳轉(zhuǎn)的路由中的屬性isAuth為true時(shí)才進(jìn)入判斷其他條件,否則會(huì)直接放行。通常我們會(huì)將用到的屬性在路由配置里定義在meta中。

{
    name:"aboutroot",
    path:"/about",
    component:About,
    meta:{
        isTrue:true
    }
},
beforeEnter(to,from,next){
	console.log('beforeEnter',to,from)
	if(to.meta.isAuth){ //判斷當(dāng)前路由是否需要進(jìn)行權(quán)限控制
		if(localStorage.getItem('school') === 'atguigu'){
			next()
		}else{
			alert('暫無(wú)權(quán)限查看')
			// next({name:'guanyu'})
		}
	}else{
		next()
	}
}

當(dāng)然除了可以在meta中進(jìn)行權(quán)限區(qū)分屬性的定義,還可以做一些全局的配置,例如跳轉(zhuǎn)路由之后的頁(yè)面頁(yè)簽。

{
    name:"aboutroot",
    path:"/about",
    component:About,
    meta:{
        isTrue:true
        title:"About組件"
    }
},

使用:

這時(shí)當(dāng)進(jìn)入about組件時(shí),就會(huì)顯示頁(yè)簽為About組件,為了防止出錯(cuò),我們做一些特殊處理以下代碼在路由沒(méi)有meta.title屬性是會(huì)顯示默認(rèn)頁(yè)簽在頁(yè)面的頁(yè)簽上。

router.afterEach((to,from)=>{
    console.log(to,from)
    document.title=to.meta.title || "默認(rèn)頁(yè)簽"
})

效果如下面兩個(gè)圖片。

5.組件內(nèi)守衛(wèi)

下面兩個(gè)路由執(zhí)行的時(shí)間是在進(jìn)入相應(yīng)路由之前執(zhí)行以及離開(kāi)這個(gè)路由之前執(zhí)行,可以進(jìn)行鑒權(quán)。

//進(jìn)入守衛(wèi):通過(guò)路由規(guī)則,進(jìn)入該組件時(shí)被調(diào)用
beforeRouteEnter (to, from, next) {
},
//離開(kāi)守衛(wèi):通過(guò)路由規(guī)則,離開(kāi)該組件時(shí)被調(diào)用
beforeRouteLeave (to, from, next) {
}

下面一個(gè)實(shí)例表示在進(jìn)入這個(gè)組件時(shí)先判斷這個(gè)組間有沒(méi)有isTrue屬性,然后判斷本地存儲(chǔ)的學(xué)校是不是nylg,只有經(jīng)過(guò)兩層驗(yàn)證之后才可以進(jìn)入該組件,否則將提示進(jìn)不去。

<template>
  <div class="col-xs-6">
    <div class="panel">
      <div class="panel-body">
        <h2>我是About的內(nèi)容</h2>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "About",
  beforeRouteEnter(to,from,next){
    // alert("想要進(jìn)入組件!")
    if(to.meta.isTrue){
      if(localStorage.getItem("school")==="nylg"){
        next()
      }else{
        alert("您無(wú)權(quán)進(jìn)入!")
      }
    }else{
      alert("組件不允許進(jìn)入!")
    }
  },
  //通過(guò)路由規(guī)則,離開(kāi)該組件時(shí)被調(diào)用
  beforeRouteLeave (to, from, next) {
    console.log('About--beforeRouteLeave',to,from)
    next()
  }
};
</script>
<style>
</style>

五、路由器的兩種工作模式

對(duì)于一個(gè)url來(lái)說(shuō),什么是hash值?—— #及其后面的內(nèi)容就是hash值。

hash值不會(huì)包含在 HTTP 請(qǐng)求中,即:hash值不會(huì)帶給服務(wù)器。

hash模式:

  • 地址中永遠(yuǎn)帶著#號(hào),不美觀(guān) 。
  • 若以后將地址通過(guò)第三方手機(jī)app分享,若app校驗(yàn)嚴(yán)格,則地址會(huì)被標(biāo)記為不合法。
  • 兼容性較好。

history模式:

  • 地址干凈,美觀(guān) 。
  • 兼容性和hash模式相比略差。
  • 應(yīng)用部署上線(xiàn)時(shí)需要后端人員支持,解決刷新頁(yè)面服務(wù)端404的問(wèn)題。

進(jìn)行history配置會(huì)很麻煩,而且使用Vue時(shí)語(yǔ)法上要有一些改變,所以如果不是大型公司或者大型項(xiàng)目使用hash模式即可。感興趣的同學(xué)也可以自己探索history模式。

到此這篇關(guān)于快速掌握Vue Router使用方法的文章就介紹到這了,更多相關(guān)Vue Router內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解unplugin?vue?components不能識(shí)別組件自動(dòng)導(dǎo)入類(lèi)型pnpm

    詳解unplugin?vue?components不能識(shí)別組件自動(dòng)導(dǎo)入類(lèi)型pnpm

    這篇文章主要為大家介紹了unplugin?vue?components不能識(shí)別組件自動(dòng)導(dǎo)入類(lèi)型pnpm詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Vue中util的工具函數(shù)實(shí)例詳解

    Vue中util的工具函數(shù)實(shí)例詳解

    本文通過(guò)實(shí)例代碼給大家介紹了Vue中util的工具函數(shù),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • vue通過(guò)過(guò)濾器實(shí)現(xiàn)數(shù)據(jù)格式化

    vue通過(guò)過(guò)濾器實(shí)現(xiàn)數(shù)據(jù)格式化

    這篇文章主要介紹了vue通過(guò)過(guò)濾器實(shí)現(xiàn)數(shù)據(jù)格式化的方法,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 3分鐘帶你快速認(rèn)識(shí)Vue3中的v-model

    3分鐘帶你快速認(rèn)識(shí)Vue3中的v-model

    model在vue里面實(shí)現(xiàn)雙向綁定,通過(guò)父節(jié)點(diǎn)向子節(jié)點(diǎn)傳遞參數(shù),子節(jié)點(diǎn)通過(guò)操作再回傳給父節(jié)點(diǎn)的變量,有點(diǎn)像prop和$emit組合使用,下面這篇文章主要給大家介紹了關(guān)于Vue3中v-model的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 在Vue中用canvas實(shí)現(xiàn)二維碼和圖片合成海報(bào)的方法

    在Vue中用canvas實(shí)現(xiàn)二維碼和圖片合成海報(bào)的方法

    這篇文章主要介紹了在Vue中用canvas實(shí)現(xiàn)二維碼和圖片合成海報(bào)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • VueJs與ReactJS和AngularJS的異同點(diǎn)

    VueJs與ReactJS和AngularJS的異同點(diǎn)

    這篇文章主要為大家詳細(xì)介紹了VueJs與ReactJS和AngularJS的異同點(diǎn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Vue項(xiàng)目中CSS?Modules和Scoped?CSS的介紹與區(qū)別

    Vue項(xiàng)目中CSS?Modules和Scoped?CSS的介紹與區(qū)別

    在vue中我們有兩種方式可以定義css作用域,一種是scoped,另一種就是css modules,下面這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中CSS?Modules和Scoped?CSS的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • vue3 axios 實(shí)現(xiàn)自動(dòng)化api配置詳解

    vue3 axios 實(shí)現(xiàn)自動(dòng)化api配置詳解

    這篇文章主要為大家介紹了vue3 axios 實(shí)現(xiàn)自動(dòng)化api配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 如何使用yarn創(chuàng)建vite項(xiàng)目+vue3

    如何使用yarn創(chuàng)建vite項(xiàng)目+vue3

    這篇文章主要介紹了如何使用yarn創(chuàng)建vite項(xiàng)目+vue3,詳細(xì)介紹了使用vite創(chuàng)建vue3過(guò)程,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • vue3?setup語(yǔ)法糖中獲取slot插槽的dom對(duì)象代碼示例

    vue3?setup語(yǔ)法糖中獲取slot插槽的dom對(duì)象代碼示例

    slot元素是一個(gè)插槽出口,標(biāo)示了父元素提供的插槽內(nèi)容將在哪里被渲染,這篇文章主要給大家介紹了關(guān)于vue3?setup語(yǔ)法糖中獲取slot插槽的dom對(duì)象的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04

最新評(píng)論