摘要:使用時才裝入需要的組件,可以有效的提高首次裝入頁面的速度。比如在路由切換時異步組件的實現(xiàn)允許將組件定義為一個工廠函數(shù),動態(tài)地解析組件的定義。組件和首頁同步加載,而組件則按需加載。
使用時才裝入需要的組件,可以有效的提高首次裝入頁面的速度。比如在路由切換時
異步組件的實現(xiàn)Vue.js允許將組件定義為一個工廠函數(shù),動態(tài)地解析組件的定義。工廠函數(shù)接收一個resolve回調(diào),成功獲取組件定義時調(diào)用。也可以調(diào)用reject(reason)指示失敗。
假設(shè)我們有兩個組件Home、About。Home組件和首頁同步加載,而About組件則按需加載。案例的代碼有首頁index.html,組件代碼about.js構(gòu)成。
首先是about.js代碼:
Vue.component("about", { template: "About page" });
接下來是index.html代碼:
Async Component test /home /about
為了加載在服務(wù)器的js文件,我們需要一個HTTP服務(wù)器??梢允褂胣ode.js的http-server實現(xiàn)。安裝并啟動一個服務(wù)器的方法:
npm install http-server -g http-server
訪問:
http://127.0.0.1:8080
我們即可在首頁看到home和about的鏈接,點擊home可以顯示home組件,點擊about,如果還沒有加載過,就加載about組件。
對index.html內(nèi)的代碼稍作解釋:
組件定義為function(resolve, reject) {}函數(shù),其內(nèi)調(diào)用load函數(shù),成功后resolve,否則reject
函數(shù)load內(nèi)通過創(chuàng)建標簽script加載指定文件,并通過onload事件當(dāng)加載完成后,通過Vue.component驗證組件,存在就resolve,否則reject
異步組件的webpack方案如果使用webpack腳手架的方式,加載異步組件將會更加直觀。本節(jié)會用同樣的案例,使用webpack做一次演示。
首先創(chuàng)建腳手架,并安裝依賴
vue init webpack vuetest cd vuetest npm i npm run dev
訪問localhost:8080,可以看到Vue的默認頁面。然后替換main.js文件為:
import Vue from "vue" import App from "./App" import VueRouter from "vue-router" import About from "./components/about" Vue.use(VueRouter) const Home = { template: "home page" } // const About = { template: "about page" } const router = new VueRouter({ routes :[ { path: "/home", component: Home }, { path: "/about", component: function (resolve) { require(["./components/about"], resolve) } }, { path: "/", redirect: "/home" } ] }) new Vue({ el: "#app", template: "", router: router, components: { App } })
并添加組件about到src/components/about.vue:
about page
再次訪問localhost:8080,可以看到Home組件和about組件的鏈接,點擊鏈接試試,可以看到組件home和about都是可以加載的。
這里特別要解釋的是代碼:
component: function (resolve) { require(["./components/about"], resolve) } }
Vue.js支持component定義為一個函數(shù):function (resolve) {},在函數(shù)內(nèi),可以使用類似node.js的庫引入模式
require(["./components/about"], resolve)
從而大大的簡化了異步組件的開發(fā)。當(dāng)然,代價是你需要使用腳手架代碼。這個特殊的require語法告訴webpack自動將編譯后的代碼分割成不同的塊,這些塊將通過按需自動下載。
關(guān)于作者:劉傳君
創(chuàng)建過產(chǎn)品,創(chuàng)過業(yè)。好讀書,求甚解。
可以通過 1000copy#gmail.com 聯(lián)系到我
bootstrap小書 https://www.gitbook.com/book/...
http小書 http://www.ituring.com.cn/boo...
Git小書 http://www.ituring.com.cn/boo...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81233.html
摘要:本文主要對組件化開發(fā)中子組件的異步加載和其生命周期進行一些探討。異步組件討論異步加載,需要先了解下異步組件。生命周期控制在使用子組件或者叫局部注冊時,我們可能需要在子組件實例化或者叫創(chuàng)建完畢后做某些事情。 前端開發(fā)社區(qū)的繁榮,造就了很多優(yōu)秀的基于 MVVM 設(shè)計模式的框架,而組件化開發(fā)思想也越來越深入人心。這其中不得不提到 Vue.js 這個專注于 VM 層的框架。 本文主要對 Vue...
摘要:異步組件在大型應(yīng)用中,我們可能需要將應(yīng)用拆分為多個小模塊,按需從服務(wù)器下載。為了進一步簡化,允許將組件定義為一個工廠函數(shù),異步地解析組件的定義。下面是我寫的一個簡單異步組件。 Vue異步組件Demo 在大型應(yīng)用中,我們可能需要將應(yīng)用拆分為多個小模塊,按需從服務(wù)器下載。為了進一步簡化,Vue.js 允許將組件定義為一個工廠函數(shù),異步地解析組件的定義。Vue.js 只在組件需要渲染時觸發(fā)工...
摘要:,常規(guī)組件,卒。小結(jié)總之呢,上面分析了在中編譯遠程模板的可能性,最后得出了兩種方法異步組件,應(yīng)該是官方的推薦方法動態(tài)組件,變通之法,論壇上發(fā)現(xiàn)的思路當(dāng)然如果有其他方法歡迎交流,本文如果有不嚴謹不正確的地方也歡迎指出本文發(fā)自我的,原文鏈接我的 說明 有些時候你可能需要從后臺獲取模板,并在前臺在自己編譯,這在用 AngularJS 1.x 的時候似乎很常見,可以直接用 ng-include...
摘要:,常規(guī)組件,卒。小結(jié)總之呢,上面分析了在中編譯遠程模板的可能性,最后得出了兩種方法異步組件,應(yīng)該是官方的推薦方法動態(tài)組件,變通之法,論壇上發(fā)現(xiàn)的思路當(dāng)然如果有其他方法歡迎交流,本文如果有不嚴謹不正確的地方也歡迎指出本文發(fā)自我的,原文鏈接我的 說明 有些時候你可能需要從后臺獲取模板,并在前臺在自己編譯,這在用 AngularJS 1.x 的時候似乎很常見,可以直接用 ng-include...
閱讀 1801·2021-11-18 10:02
閱讀 3530·2021-11-16 11:45
閱讀 1791·2021-09-10 10:51
閱讀 2111·2019-08-30 15:43
閱讀 1379·2019-08-30 11:23
閱讀 1489·2019-08-29 11:07
閱讀 1895·2019-08-23 17:05
閱讀 1416·2019-08-23 16:14