摘要:這個(gè)需求我們經(jīng)常遇到,比如我們使用時(shí),在加載其腳本模塊時(shí),在頁(yè)面我們也會(huì)添加上標(biāo)簽引入其相關(guān)的樣式文件。
樣式模塊化的好處
RequireJS被設(shè)計(jì)用來(lái)加載JavaScript模塊的,可是大家有沒有聯(lián)想到其實(shí)樣式文件可以進(jìn)行模塊化處理,那么問題來(lái)了,RequireJS能不能像加載腳本文件一樣來(lái)加載樣式文件呢?
雖然RequireJS本身沒有實(shí)現(xiàn)這個(gè)功能,但官網(wǎng)推薦了一些常用的插件供我們使用,官網(wǎng)插件插件地址為:http://requirejs.org/docs/plugins.html,同時(shí)在github上也有社區(qū)大量貢獻(xiàn)的插件:https://github.com/jrburke/requirejs/wiki/Plugins
當(dāng)然除了引用第三方插件外,我們也可以動(dòng)手自己寫一個(gè)類似插件,不過我在這里要推薦一個(gè)很不錯(cuò)的樣式模塊加載器require-css,其官網(wǎng)地址為:https://github.com/guybedford/require-css。
那么我們?cè)賮?lái)談?wù)劊瑯邮侥K話的好處吧,和腳本模塊化一樣,樣式模塊化也可以做到按需加載,樣式依賴,不過對(duì)我來(lái)說(shuō)最大的好處是將腳本的管理放權(quán)到前端管理,為什么這么說(shuō)呢?
以前我們添加樣式文件都是通過link標(biāo)簽引入的,而被引入的文件基本上都是jsp、php等后臺(tái)文件,這樣對(duì)與后臺(tái)不太熟悉的人來(lái)說(shuō),如果樣式文件發(fā)生改變,都要麻煩后臺(tái)開發(fā)人員。但是最懂樣式的莫過于前端開發(fā)人員了。
下面我們通過一個(gè)簡(jiǎn)單的例子,來(lái)介紹下require-css的用法,首先下載require-css,去到上面給出的官網(wǎng)地址,在頁(yè)面的右下角點(diǎn)擊Download ZIP按鈕,下載完成后解壓,將css.js拷貝復(fù)制到項(xiàng)目中去。
這個(gè)簡(jiǎn)單示例的目錄如下所示:
假設(shè)我們的目的是,通過加載util模塊時(shí),頁(yè)面先加載其依賴的樣式文件1.css。這個(gè)需求我們經(jīng)常遇到,比如我們使用JqueryUI時(shí),在加載其腳本模塊時(shí),在頁(yè)面我們也會(huì)添加上link標(biāo)簽引入其相關(guān)的UI樣式文件。
首先我們?cè)趐roject.html中引入RequireJS和指定配置文件(main.js)的位置。期代碼如下所示:
RequireJS簡(jiǎn)單示例 如何處理依賴問題
我們進(jìn)入到main.js配置文件。main.js應(yīng)該是頁(yè)面的入口文件,在這個(gè)入口文件中,指定了入口文件需要加載的模塊,同事也設(shè)置了RequireJS某些具體參數(shù)。其代碼如下所示:
/*入口腳本*/ require.config({ baseUrl: "scripts/", paths: { "util": "helper/util" }, waitSeconds: 15, map: { "*": { "css": "lib/css" } }, shim : { "util": ["css!../style/1.css"] } }); require(["util"], function(util) { // todo });
其中我們要特別注意map和shim的配置,"map"告訴RequireJS在任何模塊之前,都先載入這個(gè)模塊,這樣別的模塊依賴于css!../style/1.css這樣的模塊都知道怎么處理了,shim那時(shí)干什么用的呢?這這個(gè)示例中,他表示util這個(gè)模塊在加載之前需要先加載1.css這個(gè)樣式文件。當(dāng)然我們也可以在Util模塊里直接設(shè)置他的依賴,下面將會(huì)解釋。
下面我們來(lái)看看util模塊的代碼,代碼如下所示:
define(function(){ //alert("Hello RequireJS!!"); console.log($("#test").text()); });
這個(gè)模塊很簡(jiǎn)單,就是通過jQuery獲取頁(yè)面id為test的值。并且在瀏覽器的控制臺(tái)輸出來(lái)。這里你可能感覺有點(diǎn)奇怪。為什么你使用了jQuery但是在依賴數(shù)組中且沒有設(shè)置呢?正確的說(shuō),我們應(yīng)該這樣寫:
define(["jquery"],function(){ //alert("Hello RequireJS!!"); console.log($("#test").text()); });
我這樣做的目的是,用RequireJS打包時(shí),不要將jquery打包進(jìn)去,這樣就可以減少文件的大小了。還有一個(gè)上面提出的問題,加入我不用shim這個(gè)配置時(shí),可以向依賴JQuery一樣,將樣式文件寫到define的依賴數(shù)組中去。其代碼如下:
define(["css!../style/1.css"],function(){ //alert("Hello RequireJS!!"); console.log($("#test").text()); });
不過你應(yīng)該一眼就能看出來(lái),那種寫法比較好吧,我比較推薦,將依賴寫到shim配置中去。
一切配置就緒,在瀏覽器中打開project.html頁(yè)面,運(yùn)行結(jié)果如圖所示:
http://tech.techweb.com.cn/thread-622052-1-1.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/110949.html
摘要:想同時(shí)實(shí)現(xiàn)這些目標(biāo),就必須有一套按需加載的機(jī)制,頁(yè)面上展現(xiàn)的內(nèi)容和所有需要依賴的文件,都可以根據(jù)業(yè)務(wù)邏輯需要按需加載。最近都是基于做開發(fā),所以本文主要圍繞提供的各種機(jī)制,探索全面實(shí)現(xiàn)按需加載的套路。注意必須設(shè)置,否則變化以后,不截獲。 在進(jìn)行有一定規(guī)模的項(xiàng)目時(shí),通常希望實(shí)現(xiàn)以下目標(biāo):1、支持復(fù)雜的頁(yè)面邏輯(根據(jù)業(yè)務(wù)規(guī)則動(dòng)態(tài)展現(xiàn)內(nèi)容,例如:權(quán)限,數(shù)據(jù)狀態(tài)等);2、堅(jiān)持前后端分離的基本原則...
摘要:的成功離開不這三個(gè)東西,分層架構(gòu),路由系統(tǒng),儲(chǔ)存系統(tǒng)。分層架構(gòu)是我們組織復(fù)雜代碼的關(guān)鍵,路由系統(tǒng)是將多個(gè)頁(yè)面壓縮在一個(gè)頁(yè)面的關(guān)鍵。在這個(gè)種子工程中,我都調(diào)用了同一個(gè)方法,就比較適合目錄動(dòng)態(tài)生成,需要按需調(diào)用不同的頁(yè)面的情況。 SPA的成功離開不這三個(gè)東西,分層架構(gòu),路由系統(tǒng),儲(chǔ)存系統(tǒng)。分層架構(gòu)是我們組織復(fù)雜代碼的關(guān)鍵,路由系統(tǒng)是將多個(gè)頁(yè)面壓縮在一個(gè)頁(yè)面的關(guān)鍵。 其中avalon路由用到...
摘要:后續(xù)我們還會(huì)增加一些實(shí)戰(zhàn)類的移動(dòng)開發(fā)案例,歡迎關(guān)注專欄。進(jìn)入官網(wǎng)新版預(yù)覽在線預(yù)覽需要使用開啟設(shè)備模擬,效果更佳。 前言 之前寫過一篇 2018開發(fā)最快的Webapp框架--BUI交互框架 ,如果你還沒看過,可以簡(jiǎn)單看一下,主要介紹了BUI的基本功能,有多少控件,以及實(shí)現(xiàn)的思路,BUI 1.5版本以后變化很大,統(tǒng)一新的風(fēng)格,新的規(guī)范750,新增基于Dom的數(shù)據(jù)驅(qū)動(dòng),完善了頁(yè)面的生命周期等...
摘要:最近一段時(shí)間在學(xué)習(xí),由于覺得直接使用它需要加載很多的文件,因此想使用來(lái)實(shí)現(xiàn)異步加載,并動(dòng)態(tài)注入控制器。手動(dòng)啟動(dòng),特別說(shuō)明此處的不是那個(gè)框架,而是的一個(gè)手動(dòng)啟動(dòng)框架的函數(shù)中完成了各模塊的初始化,并且引入了。 最近一段時(shí)間在學(xué)習(xí)angularjs,由于覺得直接使用它需要加載很多的js文件,因此想使用requirejs來(lái)實(shí)現(xiàn)異步加載,并動(dòng)態(tài)注入控制器。簡(jiǎn)單搜索了下發(fā)現(xiàn)好多教程寫的都很復(fù)雜,所...
閱讀 891·2023-04-26 01:37
閱讀 3367·2021-09-02 15:40
閱讀 955·2021-09-01 10:29
閱讀 2887·2019-08-29 17:05
閱讀 3418·2019-08-28 18:02
閱讀 1181·2019-08-28 18:00
閱讀 1483·2019-08-26 11:00
閱讀 2602·2019-08-26 10:27