久久久久久AV无码免费看大片,亚洲一区精品人人爽人人躁,国产成人片无码免费爱线观看,亚洲AV成人无码精品网站,为什么晚上搞的时候要盖被子

vue-router路由元信息詳解

時(shí)間:2021-05-07 10:04:46 類型:vue
字號(hào):    

一、官方文檔

  路由元信息:定義路由的時(shí)候可以配置 meta 字段

const router = new VueRouter({
  routes: [
    {
      path: '/foo',
      component: Foo,
      children: [
        {
          path: 'bar',
          component: Bar,          // a meta field
          meta: { requiresAuth: true }
        }
      ]
    }
  ]
})

  那么如何訪問這個(gè) meta 字段呢?

  首先,我們稱呼 routes 配置中的每個(gè)路由對(duì)象為 路由記錄。路由記錄可以是嵌套的,因此,當(dāng)一個(gè)路由匹配成功后,他可能匹配多個(gè)路由記錄。

  例如,根據(jù)上面的路由配置,/foo/bar 這個(gè) URL 將會(huì)匹配父路由記錄以及子路由記錄。

  一個(gè)路由匹配到的所有路由記錄會(huì)暴露為 $route 對(duì)象(還有在導(dǎo)航守衛(wèi)中的路由對(duì)象)的 $route.matched 數(shù)組。因此,我們需要遍歷 $route.matched 來檢查路由記錄中的 meta 字段。

  下面例子展示在全局導(dǎo)航守衛(wèi)中檢查元字段:

router.beforeEach((to, from, next) => {  
if (to.matched.some(record => record.meta.requiresAuth)) {  
    //不熟悉some函數(shù)用法的, 要百度搜索下,這里的意思是, 循環(huán)執(zhí)行數(shù)組中的每一條信息, 只要有一個(gè)是 返回 true, 那么結(jié)果就是true 
    // this route requires auth, check if logged in    // if not, redirect to login page.
    if (!auth.loggedIn()) {
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      })
    } else {
      next()
    }
  } else {
    next() // 確保一定要調(diào)用 next()  }
})

js中some的用法:   

解析:

  1、meta 字段就是路由元信息字段,requiresAuth 是自己起的字段名稱,用來標(biāo)記這個(gè)路由信息是否需要檢測(cè),true 表示要檢測(cè),false 表示不需要檢測(cè)(這個(gè)名稱隨便起,比如我自己的就起的 requiresId,建議起個(gè)有意義的名稱)

  2、if (to.matched.some(record => record.meta.requiresAuth) ),如果對(duì)這類寫法不熟悉,可以去看看es6的箭頭函數(shù),這句話就是返回遍歷的某個(gè)路由對(duì)象,我們定義為為record,檢測(cè)這個(gè)對(duì)象是否擁有meta這個(gè)對(duì)象,如果有meta這個(gè)對(duì)象,檢測(cè)它的meta對(duì)象是不是有requiresAuth這個(gè)屬性,且為true,如果滿足上述條件,就確定了是這個(gè)/foo/bar路由。

function(i){ return i + 1; } //ES5(i) => i + 1 //ES6

  3、this route requires auth, check if logged in ,說明auth信息是必須的,檢驗(yàn)是否登錄,也就是在這個(gè)路由下,如果檢測(cè)到auth這個(gè)用戶名,那么進(jìn)行下一步操作!

  4、案例下面就有了判斷,if (!auth.loggedIn()),通過自己封裝的檢驗(yàn)方法auth.loggedIn(),檢驗(yàn)用戶是否登錄,從而決定渲染下一步操作!

  總結(jié),vue-router路由元信息說白了就是通過meta對(duì)象中的一些屬性來判斷當(dāng)前路由是否需要進(jìn)一步處理,如果需要處理,按照自己想要的效果進(jìn)行處理即可!其實(shí)比較簡單,大家可以研究下。

  5、我項(xiàng)目中實(shí)例

router.beforeEach((to, from ,next) => {  
  const token = store.getters.userInfo   
  if(to.matched.some(record => record.meta.requireAuth)){
        next()//如果路由中有meta的requireAuth,且為true,就不進(jìn)行登錄驗(yàn)證,否則進(jìn)行登錄驗(yàn)證
    }
  else{       
       if(token){
            next()
        }else{           
                 if(to.path==="/login"){
                        next()
                  }else{
                    next({path:'/login'})
            }
        }
    }    
    return}
 )


<