<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        vue-router使用總結(附代碼)

        來源:懂視網 責編:小采 時間:2020-11-27 19:49:36
        文檔

        vue-router使用總結(附代碼)

        vue-router使用總結(附代碼):這次給大家帶來vue-router使用總結(附代碼),vue-router使用的注意事項有哪些,下面就是實戰案例,一起來看一下。 前言今天面試被問到 vue的動態路由,我竟然沒有回答上來,感覺不是什么難得問題。好久沒有看vue-router的文檔,很多用的東西和概念沒有對上
        推薦度:
        導讀vue-router使用總結(附代碼):這次給大家帶來vue-router使用總結(附代碼),vue-router使用的注意事項有哪些,下面就是實戰案例,一起來看一下。 前言今天面試被問到 vue的動態路由,我竟然沒有回答上來,感覺不是什么難得問題。好久沒有看vue-router的文檔,很多用的東西和概念沒有對上

        路由元信息

        我的理解就是 他可以把路由的父路徑都列舉出來,完成一些任務,比如登錄,user 組件需要登錄,那么user下面的foo組件也需要,那么可以通過這個屬性 來檢測這個路由線上 的一些狀態。

        定義路由的時候可以配置 meta 字段:

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

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

        例如,根據上面的路由配置,/foo/bar 這個 URL 將會匹配父路由記錄以及子路由記錄。

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

        下面例子展示在全局導航守衛中檢查元字段:

        router.beforeEach((to, from, next) => {
         if (to.matched.some(record => record.meta.requiresAuth)) {
         // 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() // 確保一定要調用 next()
         }
        })

        數據獲取

        我的理解就是在哪里獲取數據,可以再組件里面,也可以在組件的守衛里面,也就是組件的生命周期里面。

        有時候,進入某個路由后,需要從服務器獲取數據。例如,在渲染用戶信息時,你需要從服務器獲取用戶的數據。我們可以通過兩種方式來實現:

        導航完成之后獲取:先完成導航,然后在接下來的組件生命周期鉤子中獲取數據。在數據獲取期間顯示『加載中』之類的指示。

        導航完成之前獲取:導航完成前,在路由進入的守衛中獲取數據,在數據獲取成功后執行導航。

        從技術角度講,兩種方式都不錯 —— 就看你想要的用戶體驗是哪種。

        導航完成后獲取數據

        當你使用這種方式時,我們會馬上導航和渲染組件,然后在組件的 created 鉤子中獲取數據。這讓我們有機會在數據獲取期間展示一個 loading 狀態,還可以在不同視圖間展示不同的 loading 狀態。

        假設我們有一個 Post 組件,需要基于 $route.params.id 獲取文章數據:

        <template>
         <p class="post">
         <p class="loading" v-if="loading">
         Loading...
         </p>
         <p v-if="error" class="error">
         {{ error }}
         </p>
         <p v-if="post" class="content">
         <h2>{{ post.title }}</h2>
         <p>{{ post.body }}</p>
         </p>
         </p>
        </template>
        export default {
         data () {
         return {
         loading: false,
         post: null,
         error: null
         }
         },
         created () {
         // 組件創建完后獲取數據,
         // 此時 data 已經被 observed 了
         this.fetchData()
         },
         watch: {
         // 如果路由有變化,會再次執行該方法
         '$route': 'fetchData'
         },
         methods: {
         fetchData () {
         this.error = this.post = null
         this.loading = true
         // replace getPost with your data fetching util / API wrapper
         getPost(this.$route.params.id, (err, post) => {
         this.loading = false
         if (err) {
         this.error = err.toString()
         } else {
         this.post = post
         }
         })
         }
         }
        }

        在導航完成前獲取數據

        通過這種方式,我們在導航轉入新的路由前獲取數據。我們可以在接下來的組件的 beforeRouteEnter 守衛中獲取數據,當數據獲取成功后只調用 next 方法。

        export default {
         data () {
         return {
         post: null,
         error: null
         }
         },
         beforeRouteEnter (to, from, next) {
         getPost(to.params.id, (err, post) => {
         next(vm => vm.setData(err, post))
         })
         },
         // 路由改變前,組件就已經渲染完了
         // 邏輯稍稍不同
         beforeRouteUpdate (to, from, next) {
         this.post = null
         getPost(to.params.id, (err, post) => {
         this.setData(err, post)
         next()
         })
         },
         methods: {
         setData (err, post) {
         if (err) {
         this.error = err.toString()
         } else {
         this.post = post
         }
         }
         }
        }

        在為后面的視圖獲取數據時,用戶會停留在當前的界面,因此建議在數據獲取期間,顯示一些進度條或者別的指示。如果數據獲取失敗,同樣有必要展示一些全局的錯誤提醒。

        相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

        推薦閱讀:

        vue+Echarts實現點擊高亮(附代碼)

        用vue讓a標簽點擊高亮(附代碼)

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue-router使用總結(附代碼)

        vue-router使用總結(附代碼):這次給大家帶來vue-router使用總結(附代碼),vue-router使用的注意事項有哪些,下面就是實戰案例,一起來看一下。 前言今天面試被問到 vue的動態路由,我竟然沒有回答上來,感覺不是什么難得問題。好久沒有看vue-router的文檔,很多用的東西和概念沒有對上
        推薦度:
        標簽: 使用 VUE 代碼
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久亚洲日韩看片无码| 亚洲精品福利视频| 在线观看亚洲免费| 亚洲三级在线播放| 91精品成人免费国产片| 亚洲五月六月丁香激情| 久久精品无码精品免费专区| 国产在线观看片a免费观看| 亚洲?v无码国产在丝袜线观看 | 亚洲综合无码AV一区二区| 二级毛片免费观看全程| 99re视频精品全部免费| 婷婷亚洲天堂影院| 国产VA免费精品高清在线| 国产成人精品日本亚洲专区61 | 国产精品亚洲午夜一区二区三区| 亚洲视频在线观看免费视频| 亚洲免费一级视频| 一区二区三区无码视频免费福利 | 亚洲日日做天天做日日谢| 久久国产乱子伦精品免费午夜 | 亚洲日韩久久综合中文字幕| 成人无码精品1区2区3区免费看| 国产精品亚洲美女久久久| 亚洲精品天堂成人片?V在线播放| EEUSS影院WWW在线观看免费| 亚洲卡一卡2卡三卡4卡无卡三| 永久免费的网站在线观看| 羞羞网站在线免费观看| 四虎永久在线观看免费网站网址 | 亚洲视频无码高清在线| 亚洲A∨精品一区二区三区| 精品免费视在线观看| 亚洲中文无码av永久| 免费成人午夜视频| 久9久9精品免费观看| 国产亚洲欧洲精品| 国产福利在线观看免费第一福利| 羞羞漫画登录页面免费| 亚洲无删减国产精品一区| 国产免费人成视频在线观看|