最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue-router定義元信息meta操作

 更新時(shí)間:2020年12月07日 09:32:53   作者:書(shū)院二層樓  
這篇文章主要介紹了vue-router定義元信息meta操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import Test from '../views/Test.vue'
import NotFound from '../views/NotFound.vue'
import TestChild from '../views/TestChild.vue'
import AView from '../views/AView.vue'
import BView from '../views/BView.vue'
 
Vue.use(VueRouter)
 
const routes = [
 {
 path: '/',
 alias:'/home',
 components:{
  default: Home,
  aView: AView,
  bView: BView,
 },
 },
 {
 path: '/test/:id',
 name: 'Test',
 component: Test,
 props:true,
 children:[
  {
  path: ':name',
  name: 'TestChild',
  component: TestChild,
  props:true,
  /*
  定義路由的時(shí)候可以配置 meta 字段,用于一些校驗(yàn),比如在導(dǎo)航守衛(wèi)中進(jìn)行校驗(yàn),定義的值可以在$route中訪問(wèn)到
  */
  meta:{
  isRequiresAuth:true,
  isChecked:false,
  }
 }]
 },
 {
 path: '*',
 name: 'NotFound',
 component: NotFound
 },
]
 
const router = new VueRouter({
 mode: 'history',
 base: process.env.BASE_URL,
 routes
})
 
export default router

views/TestChild.vue

<template>
 <div>
  我是TestChild,查看動(dòng)態(tài)路由參數(shù)name:{{name}}
 </div>
</template>
 
<script>
 export default {
  props:["name"],
  created () {
   //打印meta中定義的isRequiresAuth
   console.log(this.$route.meta.isRequiresAuth);
  },
 }
</script>
 
<style lang="scss" scoped>
 
</style>

效果截圖:

補(bǔ)充知識(shí):vue-router路由元信息及keep-alive組件級(jí)緩存

路由元信息?(黑人問(wèn)號(hào)臉???)是不是這么官方的解釋很多人都會(huì)一臉懵?那么我們說(shuō)meta,是不是很多人恍然大悟,因?yàn)樵陧?xiàng)目中用到或者看到過(guò)呢?

是的,路由元信息就是我們定義路由時(shí)配置的meta字段;那么這個(gè)meta的作用是什么呢?

首先看一個(gè)場(chǎng)景:

通常我們?cè)陂_(kāi)發(fā)網(wǎng)站或者移動(dòng)應(yīng)用的時(shí)候,我們通常會(huì)有網(wǎng)頁(yè)權(quán)限驗(yàn)證的需求(別說(shuō)你沒(méi)有,你肯定有),這種需求一般是指需要登錄后才可進(jìn)入,也就是需要用戶登錄獲取用戶Token或者用戶信息之后才可進(jìn)入;當(dāng)這個(gè)需求下來(lái)的時(shí)候,我們作為前端開(kāi)發(fā)人員的第一反應(yīng)是路由守衛(wèi)啊,一個(gè)路由前置守衛(wèi)通過(guò)判斷to.path就可以解決;

用to.path來(lái)判斷做權(quán)限驗(yàn)證會(huì)有兩個(gè)問(wèn)題:    

1:首先,如果需要做權(quán)限驗(yàn)證的頁(yè)面很多呢?難道我們要通過(guò)if(to.path==='/' || to.path === '/home')這種方式來(lái)一個(gè)個(gè)的添加路徑判斷嗎?

2:然后,routes管理器中會(huì)有很多json對(duì)象,這種json對(duì)象我們通常把它叫做路由記錄,路由記錄是可以嵌套的,允許存在父子關(guān)系;我們用if來(lái)判斷的時(shí)候,會(huì)有匹配不完全的問(wèn)題,例如你匹配了/home,那么/home/list呢,這個(gè)將不會(huì)被匹配到;

我們的理想狀態(tài)下是假如我要限制了/home,那么不管你路徑是/home/index也好還是/home/home也好,只要是home下來(lái)的子路由記錄統(tǒng)統(tǒng)都需要登錄后才能訪問(wèn);

這個(gè)時(shí)候我們就可以考慮用路由元信息meta來(lái)進(jìn)行處理;

首先簡(jiǎn)單的看一下頁(yè)面效果:

我們的路由管理器中的路由記錄配置如下:

const routes=[
 {
  path:'/page1',
  component:page1,
  meta:{
   login:true
  },
  children: [
   {
    path: "phone",
    component: phone
   },
   {
    path: "computer",
    component: computer
   },
  ]
 },

 {
  path:"/page2",
  component:page2,
  meta:{
   login:false
  }
 },
]

我們上面在meta中自定義login字段是標(biāo)識(shí)當(dāng)前路由是否需要驗(yàn)證token;

然后我們的路由前置全局守衛(wèi)可以這么寫(xiě):

router.beforeEach((to, from, next) => {
 //定義token來(lái)模擬
 let token =“123456”
 //判斷即將進(jìn)入的路由是否需要驗(yàn)證
 if(to.meta.login){
  //如果即將進(jìn)入的路由需要驗(yàn)證
 //并且token不存在的話,那么就跳轉(zhuǎn)page2(登錄頁(yè))
  if(!token){
   next("/page2");
  //如果需求驗(yàn)證token存在直接放行
  }else{
   next();
  }
 //如果不需要驗(yàn)證也是直接放行
 }else{
 next();
 }
})

最后效果圖如下:

當(dāng)然這只是路由元信息的功能其一,路由元信息其實(shí)有很多用途,類似于一個(gè)當(dāng)前路由的全局變量,可以通過(guò)meta來(lái)進(jìn)行判斷操作;

keep-alive組件:

場(chǎng)景:

在一個(gè)列表項(xiàng)很長(zhǎng)的時(shí)候我們通常需要進(jìn)行分頁(yè)操作,移動(dòng)端的分頁(yè)操作基本上是上拉加載和下拉刷新;假如我們已經(jīng)進(jìn)入了這個(gè)列表的第四頁(yè),那么當(dāng)我們想進(jìn)去詳情頁(yè)查看詳情的時(shí)候,當(dāng)我們返回的時(shí)候這個(gè)時(shí)候頁(yè)碼會(huì)直接變?yōu)?,因?yàn)閿?shù)據(jù)已經(jīng)初始化狀態(tài);這個(gè)問(wèn)題我們通常需要keep-alive組件來(lái)解決;

keep-alive是Vue內(nèi)置的一個(gè)組件,通常是用來(lái)保留數(shù)據(jù)狀態(tài)或避免重復(fù)渲染,也就是我們說(shuō)的緩存效果;

使用:

<keep-alive>
 <component>
 <!-- 該組件將被緩存! -->
 </component>
</keep-alive>

keep-alive給我們提供了兩個(gè)屬性,分別是include和exclude:

    

include:接受值為字符串或者正則表達(dá)式,只有匹配的才被緩存;

    

exclude:接受值為字符串或者正則表達(dá)式,被匹配的路由將不會(huì)被緩存;

// 組件 a
export default {
 name: 'a',
 data () {
 return {}
 }
}
<keep-alive include="a">
 <component>
 <!-- name 為 a 的組件將被緩存! -->
 </component>
</keep-alive>可以保留它的狀態(tài)或避免重新渲染
<keep-alive exclude="a">
 <component>
 <!-- 除了 name 為 a 的組件都將被緩存! -->
 </component>
</keep-alive>可以保留它的狀態(tài)或避免重新渲染

當(dāng)然我們也可以根據(jù)組件來(lái)動(dòng)態(tài)緩存,我們知道vue-router是Vue官方給我們提供的一個(gè)路由組件:

<keep-alive>
 <router-view>
  <!-- 所有路徑匹配到的視圖組件都會(huì)被緩存! -->
 </router-view>
</keep-alive>

如果像上述代碼這樣,我們的所有路由視圖都將被緩存,我們這個(gè)時(shí)候就可以借助我們的路由元信息meta,那么我們來(lái)修改一下代碼實(shí)現(xiàn)動(dòng)態(tài)緩存:

思路:

meta路由元信息對(duì)象里面放著的是類似于局部變量,在路由匹配的組件內(nèi)部都能夠訪問(wèn)得到,我們可以通過(guò)meta來(lái)定義一個(gè)自定義字段來(lái)判斷標(biāo)識(shí)頁(yè)面是否需要開(kāi)啟緩存:

// routes 配置
export default [
 {
 path: '/',
 name: 'home',
 component: Home,
 meta: {
  keepAlive: true // 需要被緩存
 }
 }, {
 path: '/:id',
 name: 'edit',
 component: Edit,
 meta: {
  keepAlive: false // 不需要被緩存
 }
 }
]
 //通過(guò)v-if來(lái)動(dòng)態(tài)的判斷展示
<keep-alive>
 <router-view v-if="$route.meta.keepAlive">
  <!-- 這里是會(huì)被緩存的視圖組件,比如 Home! -->
 </router-view>
</keep-alive>

<router-view v-if="!$route.meta.keepAlive">
 <!-- 這里是不被緩存的視圖組件,比如 Edit! -->
</router-view>

以上這篇vue-router定義元信息meta操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 在vue項(xiàng)目中引用Iview的方法

    在vue項(xiàng)目中引用Iview的方法

    iView 是一套基于 Vue.js 的開(kāi)源 UI 組件庫(kù),主要服務(wù)于 PC 界面的中后臺(tái)產(chǎn)品。這篇文章主要介紹了在vue項(xiàng)目中引用Iview的方法,需要的朋友可以參考下
    2018-09-09
  • vue獲取當(dāng)前激活路由的方法

    vue獲取當(dāng)前激活路由的方法

    下面小編就為大家分享一篇vue獲取當(dāng)前激活路由的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue?(Vuex)中?store?基本用法

    Vue?(Vuex)中?store?基本用法

    Vuex?是一個(gè)專為?Vue.js?應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化,這篇文章主要介紹了Vue?中?store?基本用法,需要的朋友可以參考下
    2023-01-01
  • vue動(dòng)態(tài)路由加載時(shí)出現(xiàn)Cannot?find?module?xxx問(wèn)題

    vue動(dòng)態(tài)路由加載時(shí)出現(xiàn)Cannot?find?module?xxx問(wèn)題

    這篇文章主要介紹了vue動(dòng)態(tài)路由加載時(shí)出現(xiàn)Cannot?find?module?xxx問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vuex?mutation?action同級(jí)調(diào)用方式

    vuex?mutation?action同級(jí)調(diào)用方式

    這篇文章主要介紹了vuex?mutation?action同級(jí)調(diào)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue前端左側(cè)菜單右側(cè)內(nèi)容的網(wǎng)站界面制作過(guò)程

    Vue前端左側(cè)菜單右側(cè)內(nèi)容的網(wǎng)站界面制作過(guò)程

    這篇文章主要介紹了使用Vue和ElementUI制作一個(gè)帶有左側(cè)菜單和右側(cè)內(nèi)容區(qū)的網(wǎng)站頁(yè)面的過(guò)程,文中通過(guò)CSS樣式和深度作用符,實(shí)現(xiàn)了頁(yè)面的美化和功能的完善,需要的朋友可以參考下
    2025-02-02
  • vue 手機(jī)物理監(jiān)聽(tīng)鍵+退出提示代碼

    vue 手機(jī)物理監(jiān)聽(tīng)鍵+退出提示代碼

    這篇文章主要介紹了vue 手機(jī)物理監(jiān)聽(tīng)鍵+退出提示代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue3組件庫(kù)Shake抖動(dòng)組件搭建過(guò)程詳解

    vue3組件庫(kù)Shake抖動(dòng)組件搭建過(guò)程詳解

    這篇文章主要為大家介紹了vue3組件庫(kù)Shake抖動(dòng)組件搭建過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue中使用refs定位dom出現(xiàn)undefined的解決方法

    vue中使用refs定位dom出現(xiàn)undefined的解決方法

    本篇文章主要介紹了vue中使用refs定位dom出現(xiàn)undefined的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Vue3+elementui plus創(chuàng)建項(xiàng)目的方法

    Vue3+elementui plus創(chuàng)建項(xiàng)目的方法

    這篇文章主要介紹了Vue3+elementui plus創(chuàng)建項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12

最新評(píng)論

灵武市| 武清区| 土默特右旗| 禹城市| 荔波县| 博客| 军事| 离岛区| 大理市| 察隅县| 昭苏县| 峨山| 墨江| 武山县| 玉龙| 邻水| 平顶山市| 汤阴县| 永新县| 长丰县| 榆树市| 共和县| 攀枝花市| 沂南县| 根河市| 吴堡县| 九江市| 通辽市| 南澳县| 彰化市| 确山县| 富宁县| 瓦房店市| 迭部县| 琼中| 会理县| 太谷县| 灵川县| 曲麻莱县| 龙泉市| 广东省|