国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue-router路由懶加載

這篇具有很好參考價值的文章主要介紹了vue-router路由懶加載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

路由懶加載指的是打包部署時將資源按照對應(yīng)的頁面進(jìn)行劃分,需要的時候加載對應(yīng)的頁面資源,而不是把所有的頁面資源打包部署到一塊。避免不必要資源加載。(參考vue項目實現(xiàn)路由按需加載(路由懶加載)的3種方式_小胖梅的博客-CSDN博客_vue懶加載?)

// 非懶加載
import Home from '@/components/Home'

const routes = [
  {
    path: '/home',
    name: 'home',
    component: Home
  }
]

這里有三種方式可以實現(xiàn)vue項目路由跳轉(zhuǎn)時資源的按需加載。

1. vue異步組件

? vue-router配置路由,使用vue的異步組件技術(shù),可以實現(xiàn)按需加載。

? 但是,這種情況下每一個組件就會生成一個js文件,不能分類指定chunkName

// vue異步組件
{
  path: '/home',
  name: 'home',
  component: resolve => require(['@/components/home'], resolve)
}

2. 使用import

// const 組件名 = () => import('組件路徑');
// 下面2行代碼,沒有指定webpackChunkName,每個組件打包成一個js文件。
const Home = () => import('@/componnets/home');
const Index = () => import('@/components/index');

// 下面2行代碼,指定了相同的webpackChunkName,會合并打包成一個js文件
// 把組件按組分塊
const Home = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/home');
const Index = () => import(/* webpackChunkName: 'ImportFuncDemo' */ '@/components/index')

{
  path: '/home',
  name: 'home',
  component: Home
}, {
  path: '/index',
  name: 'index',
  component: Index
}

3. webpack提供的require.ensure()

? 該方法也可指定相同的chunkName,合并打包成一個js文件。

{
  path: '/home',
  name: 'home',
  component: r => require.ensure([], () => r(require('@/components/home')), 'demo')
}, {
  path: '/index',
  name: 'index',
  component: r => require.ensure([], () => r(require('@/components/index')), 'demo')
}, {
  path: '/about',
  name: 'about',
  // 傳入空字符串 則每個component會單獨生成一個js文件
  component: r => require.ensure([], () => r(require('@/components/index')), '')
}

公司后臺項目路由懶加載模式修改(新后臺vue2.0)

項目背景:老后臺(angular1.x版本)正在遷移新后臺(vue2.0)

未修改之前:

打完包之后有156個js文件,這是按照每個路由對應(yīng)的component生成一個js文件,這就意味著到時候老后臺全部遷移到新后臺之后,目前大概有800個路由,那就會生成800多個js文件,這種模式的路由懶加載對于后臺管理系統(tǒng)其實是沒有必要的,所以考慮通過webpackChunkName將各個模塊分類,一個一級分類指定一個chunkName。

vue-router路由懶加載

修改之后:

打完包只有25個js文件,看起來就舒服多了。

vue-router路由懶加載

各個大模塊路由懶加載修改的格式如下:

在一個大的路由模塊下,指定相同的webpackChunkName。

vue-router路由懶加載

修改之后打包生成的文件名格式如下:

hash值之前為自己設(shè)置的webpackChunkName名稱。

vue-router路由懶加載

這里當(dāng)時遇到的一個問題如下圖所示:

vue-router路由懶加載

如左邊紅框所示,生成的文件里面多了一個用 '~' 拼接起來的js文件。

這個后來翻到了webpack的splitChunks.automaticNameDelimiter。因為項目中在這三個模塊下,都引入了同一個文件(UEditor),并且項目中也并沒有指定對應(yīng)的webpackChunkName,所以webpack內(nèi)部自動處理,將這個文件單獨提取出來,并自動命名,命名規(guī)則見webpack官方文檔,連接符 '~' 是可配置的。

出現(xiàn)? '~' 連接符的組件引入方式如下:

vue-router路由懶加載

修改之后的引入方式如下:

指定了webpackChunkName,以后其他模塊引入富文本UEditor時也請按照此方式引入,命名保持相同。

vue-router路由懶加載

以下是webpack官方文檔對automaticNameDelimiter配置的解釋。

vue-router路由懶加載

vue-router路由懶加載

vue-router核心原理解析:(參考【第2194期】SPA 路由三部曲之核心原理?)

路由描述了URL和UI之間的映射關(guān)系,這種映射是單向的,即URL變化引起UI更新(無需刷新頁面)。前端路由最主要的展示方式有2種:

  • 帶有hash的前端路由:地址欄URL中有 #,即hash值,不好看,但兼容性高。
  • 不帶hash的前端路由:地址欄URL中沒有 #,好看,但部分瀏覽器不支持,還需要后端服務(wù)器支持。

在vue-router中,這兩種展示形式,被定義成兩種模式,即Hash模式與History模式。前端路由實現(xiàn)原理很簡單,本質(zhì)上就是檢測URL的變化,截獲URL地址,通過解析、匹配路由規(guī)則實現(xiàn)UI更新。

① Hash模式

一個完整的URL包括:協(xié)議、域名、端口、虛擬目錄、文件名、參數(shù)、錨。

vue-router路由懶加載

Hash值指的是URL地址中的錨部分,也就是# 后面的部分。hash也稱作錨點,是用來做頁面定位的,與hash值對應(yīng)的DOM id顯示在可視區(qū)域內(nèi)。在HTML5的history新特性出現(xiàn)前,基本都是使用監(jiān)聽hash值來實現(xiàn)前端路由的。hash值更新有一下幾個特點:

  • hash值是網(wǎng)頁的標(biāo)志位,HTTP請求不包含錨部分,對后端無影響
  • 因為HTTP請求不包含錨部分,所以hash值改變時,不觸發(fā)網(wǎng)頁重載
  • 改變hash值會改變?yōu)g覽器的歷史紀(jì)錄
  • 改變hash值會觸發(fā)window.onhashchange()事件

而改變hash值的方式有3種:

  • a標(biāo)簽使錨點值變化,例:<a href="#/home"></a>
  • 通過設(shè)置window.location.hash的值
  • 瀏覽器前進(jìn)鍵(history.forword())、后退鍵(history.back())

綜上所述,這3種改變hash值的方式,并不會導(dǎo)致瀏覽器向服務(wù)器發(fā)送請求,瀏覽器不發(fā)出請求,也就不會刷新頁面。hash值改變,觸發(fā)全局的window對象上的hashchange事件。所以hash模式路由就是利用hashchange事件監(jiān)聽URL的變化,從而進(jìn)行DOM操作來模擬頁面跳轉(zhuǎn)。

② History模式

主要應(yīng)用了History API新增的兩個方法:pushState()、replaceState(),均具有操縱瀏覽器歷史記錄的能力。

history.pushState(state, title, URL),該方法共接收3個參數(shù):

  • state:用于存儲該URL對應(yīng)的狀態(tài)對象,可以通過history.state獲取
  • title:標(biāo)題,目前瀏覽器并不支持
  • URL:定義新的歷史URL記錄,需要注意,新的URL必須與當(dāng)前URL同源,不能跨域

pushState函數(shù)會向瀏覽器的歷史記錄中國添加一條,history.length的值會+1,當(dāng)前瀏覽器的URL變成了新的URL。需要注意的是:僅僅將瀏覽器的URL變成了新的URL,頁面不會加載、刷新。

history.replaceState(state, title, URL)

replaceState的使用與pushState非常相似,都是改變當(dāng)前的URL,頁面不刷新。區(qū)別在于replaceState是修改了當(dāng)前的歷史記錄項而不是新建一個,history.length的值保持不變。

window.onpopstate()

為了配合history.pushState()或者h(yuǎn)istory.replaceState(),HTML5還新增了一個事件,用于監(jiān)聽URL歷史記錄改變:window.onpopstate。

官方對于window.onpopstate()事件的描述是這樣的:

每當(dāng)處于激活狀態(tài)的歷史記錄條目發(fā)生變化時,popstate事件就會在對應(yīng)的window對象上觸發(fā)。如果當(dāng)前處于激活狀態(tài)的歷史記錄條目是由history.pushState()方法創(chuàng)建,或者由history.replaceState()方法修改過的,則popstate事件對象的state屬性包含了這個歷史記錄條目的state對象的一個拷貝。調(diào)用history.pushState()或者h(yuǎn)istory.replaceState()不會觸發(fā)popstate事件。popstate事件只會在瀏覽器某些行為下觸發(fā),比如點擊后退、前進(jìn)按鈕(或者在Javascript中調(diào)用 history.back()、history.foward()、history.go()方法),此外,a標(biāo)簽的錨點也會觸發(fā)該事件。

結(jié)合上述,在瀏覽器支持 pushState 的情況下,hash 模式路由也可以使用 pushState 、replaceState 和 popstate 實現(xiàn)。pushstate 改變 hash 值,進(jìn)行跳轉(zhuǎn),popstate 監(jiān)聽 hash 值的變化。小小的劇透,vue-router 中不管是 hash 模式,還是 history 模式,只要瀏覽器支持 history 的新特性,使用的都是 history 的新特性進(jìn)行跳轉(zhuǎn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-402300.html

到了這里,關(guān)于vue-router路由懶加載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue-router(路由)詳細(xì)教程

    路由是一個比較廣義和抽象的概念,路由的本質(zhì)就是 對應(yīng)關(guān)系 。 在開發(fā)中,路由分為: ? 后端路由 ? 前端路由 后端路由 概念:根據(jù)不同的用戶 URL 請求,返回不同的內(nèi)容 本質(zhì):URL 請求地址與服務(wù)器資源之間的對應(yīng)關(guān)系 [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將

    2024年02月04日
    瀏覽(21)
  • vue-router路由模式詳解

    vue-router路由模式詳解

    目錄 一. vue-router(前端路由)有兩種模式,hash模式和history模式 二、路由模式解析 三、兩種模式的區(qū)別 1、hash模式 ?2、history路由 (3)popstate實現(xiàn)history路由攔截,監(jiān)聽頁面返回事件 一. vue-router(前端路由)有兩種模式,hash模式和history模式 1.hash 就是指 url 后面的 # 號以及后

    2024年02月03日
    瀏覽(34)
  • 【Vue-Router】路由傳參

    【Vue-Router】路由傳參

    list.json login.vue reg.vue App.vue index.ts reg.vue item?.name ,item?.price ,item?.id ,他們?nèi)绻皇褂每蛇x鏈操作符會出現(xiàn)報錯: \\\'__VLS_ctx.item\\\' is possibly \\\'undefined\\\'. login.vue 注意: 傳遞 params 參數(shù)時,若使用 to 的對象寫法,必須使用 name 配置項,不能用 path 。 傳遞 params 參數(shù)時,需要提前在規(guī)

    2024年02月13日
    瀏覽(20)
  • vue3使用vue-router嵌套路由(多級路由)

    vue3使用vue-router嵌套路由(多級路由)

    Vue3 嵌套路由的使用和 Vue2 相差不大,主要的區(qū)別是 Vue3 的路由實例化使用了 createApp() 方法,所以實例化路由時需要傳入根組件。另外,Vue3 的路由對象除了包含 Vue2 中的導(dǎo)航守衛(wèi)、導(dǎo)航鉤子和解析守衛(wèi)等功能外,還新增了 meta prop 和 route prop。 在使用嵌套路由時,建議將路由

    2024年02月03日
    瀏覽(29)
  • Vue3配置路由(vue-router)

    Vue3配置路由(vue-router)

    緊接上篇文章,vue3的配置與vue2是有所差別的,本文就講述了如何配置,如果本文對你有所幫助請三連支持博主。 下面案例可供參考 使用npm命令進(jìn)行安裝 : npm install vue-router@4 完成后我們打開項目根目錄下的 package.json 文件: 如下即為成功 這里創(chuàng)建 view目錄,然后在view目錄

    2023年04月12日
    瀏覽(27)
  • 路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由,vue-router的基本用法,vue-router的常見用法$route.params、$router.push、$router.replace、$router.go

    路由(英文: router)就是 對應(yīng)關(guān)系 。 SPA指的是一個web網(wǎng)站只有唯一的一個HTML頁面, 所有組件的展示與切換 都在這唯一的一個頁面內(nèi)完成。此時, 不同組件之間的切換 需要通過 前端路由 來實現(xiàn)。 *結(jié)論:*在SPA項目中, 不同功能之間的切換 ,要 依賴于前端路由 來完成! 通俗

    2024年01月16日
    瀏覽(27)
  • Vue3的vue-router路由詳解

    Vue3的vue-router路由詳解

    這篇文章是接著【三分鐘快速搭建Vue3+webpack項目】的內(nèi)容做的開發(fā),有基礎(chǔ)的可以跳過?【三分鐘快速搭建Vue3+webpack項目】,直接看以下的內(nèi)容。 Vue3的vue-router路由詳解: 首先安裝路由依賴模塊: 所需代碼文件如下圖: 圖1 ? 所需要的主要文件: index.html、index.js、App.vue in

    2024年02月01日
    瀏覽(21)
  • 5.10 Vue配置路由(vue-router)

    5.10 Vue配置路由(vue-router)

    官方網(wǎng)站:https://v3.router.vuejs.org/zh/installation Vue Router 是 Vue.js 官方提供的一種路由管理工具,它可以幫助開發(fā)者管理 Vue.js 應(yīng)用程序的路由,并實現(xiàn)路由跳轉(zhuǎn)、參數(shù)傳遞、嵌套路由等功能。Vue Router 可以將一個單頁面應(yīng)用分成多個視圖,在不同的路由之間進(jìn)行切換,從而實現(xiàn)了

    2024年02月08日
    瀏覽(25)
  • vue-router 路由元信息meta

    meta原信息是一個可以給路由記錄攜帶一個對象的字段(字段名只能為meta,其他的設(shè)置了也沒用),你可以在這個字段里存一些信息,例如該路由地址是否需要身份驗證、該地址是否需要導(dǎo)航欄等。 獲取方式如下: vue-router官方例子如下,是一個根據(jù)meta判斷該路徑是否需要驗

    2024年02月13日
    瀏覽(18)
  • Vue-Router(4) 學(xué)習(xí)之動態(tài)路由二

    1. 動態(tài)路由表?dynamic_routes 說明:depthFlagArr,show_ivl_menu 是判斷是否加載路由的標(biāo)識 2. 路由控制?private_routes.ts 使用pinia作為全局store,控制包括路由權(quán)限、userinfo、token等動態(tài)信息 ? 3. 菜單欄 顯示在左側(cè)的導(dǎo)航欄 4. 問題思考 ? ? ? ? 4.1 動態(tài)路由刷新404 ? ? ? ? 4.2 動態(tài)路由與

    2024年02月12日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包