摘要:參數(shù)為循環(huán)遍歷時(shí)的回調(diào)函數(shù),它分別接收遍歷項(xiàng)的值遍歷下表遍歷變量本身三個(gè)參數(shù),當(dāng)回調(diào)函數(shù)返回時(shí)將結(jié)束本次循環(huán),而且此時(shí)執(zhí)行結(jié)束后也將會(huì)返回一個(gè),這在結(jié)束多層循環(huán)遍歷時(shí)很有用,開(kāi)發(fā)者可以通過(guò)再次推出上層循環(huán)。
Amaple 擁有非常強(qiáng)大插件功能,這也是它的突出功能之一,Amaple插件一般表現(xiàn)為功能塊(函數(shù))或功能塊(包含一系列函數(shù)和屬性的Object對(duì)象),它除了支持Amaple規(guī)范定義的插件外,還支持所有 AMD (點(diǎn)擊了解詳情)和 IIFE (點(diǎn)擊了解詳情)規(guī)范的插件,在 rollup 、 webpack 、 browserify 等模塊打包工具流行的今天,這也意味著幾乎所有的第三方j(luò)s庫(kù)都可以與Amaple協(xié)同運(yùn)作,同時(shí)也支持舊式的iife格式j(luò)s庫(kù)。
定義并安裝Amaple規(guī)范的插件在安裝Amaple規(guī)范的插件前,我們需定義一個(gè)特定格式的pluginDefinition(插件定義對(duì)象)供Amaple安裝,這個(gè)對(duì)象必須包含name屬性和build函數(shù),分別表示插件名與構(gòu)建函數(shù),此構(gòu)建函數(shù)返回的值將作為插件實(shí)體。然后使用am.install(pluginDefinition)并傳入插件安裝對(duì)象pluginDefinition進(jìn)行安裝:
// 插件定義對(duì)象 const pluginDefinition = { name : "switch", // 定義插件名,命名規(guī)則與變量名的規(guī)則相同 // 構(gòu)建函數(shù),它要求返回一個(gè)插件實(shí)體 // 無(wú)效返回值(undefined、null、0、false等)將會(huì)拋出錯(cuò)誤 // build函數(shù)中的this指向的是am對(duì)象,所以你可以使用它進(jìn)行組件定義或am屬性的擴(kuò)展 build : function () { var state = "OFF"; return { press: function () { return state === "OFF" ? "ON" : "OFF"; } }; } }; // 調(diào)用后插件將會(huì)被安裝,此時(shí)就完成了一個(gè)名為switch的插件 // 它是一個(gè)含有`press`函數(shù)的Object對(duì)象。 am.install (pluginDefinition);
在A(yíng)maple中,插件也可以像模塊與組件文件一樣編寫(xiě)在獨(dú)立的js文件中,它也提供了相應(yīng)的插件載入機(jī)制。如我們可將上面的插件定義代碼多帶帶放到/plugin/switch.js文件中。
載入插件無(wú)論是 Amaple 規(guī)范、 amd 和 iife 規(guī)范的插件在A(yíng)maple中都可以以多帶帶文件的形式存在,對(duì)于這些插件我們需要載入它們才可使用,我們可在am.startRouter函數(shù)的參數(shù)內(nèi)添加plugin屬性指定項(xiàng)目依賴(lài)的插件路徑信息,這樣Amaple將會(huì)自動(dòng)加載這些插件文件,plugin具體配置如下:
am.startRouter( { // ... baseURL : { // ... // 可為插件文件設(shè)置base路徑,所有的插件文件請(qǐng)求路徑都將基于“/plugin”目錄,不設(shè)置時(shí)默認(rèn)為“/” plugin: "/plugin" }, // plugin的值為一個(gè)數(shù)組,通過(guò)它來(lái)指定項(xiàng)目中依賴(lài)的所有插件 // 以下分別表示插件載入的4種方式 plugin: [ // ①.插件路徑字符串,適用于amaple規(guī)范的多帶帶文件插件 // 如上面定義的switch插件可使用此方式載入,加載路徑依賴(lài)baseURL "siwtch", // ②.插件定義對(duì)象pluginDefinition,直接傳入此對(duì)象后將會(huì)安裝此插件 // 與amaple規(guī)范的多帶帶文件插件相比,不需調(diào)用am.install函數(shù)。 // 這對(duì)于webpack等模塊化環(huán)境下非常有用,你可以import任意js庫(kù)并通過(guò)build函數(shù)retuen它進(jìn)行安裝 { name: "switch", build: function () { ... } }, // ③.amd規(guī)范js庫(kù),支持amd規(guī)范的所有js庫(kù)都可以這樣載入并作為amaple的插件使用 // url依賴(lài)baseURL,且url值為“http://”、“https://”開(kāi)頭時(shí)可直接載入外網(wǎng)js庫(kù) { format: "amd", name: "anime", url: "amd/animejs" }, // ④.iife規(guī)范js庫(kù),iife規(guī)范下將會(huì)使用global的值作為全局對(duì)象名,并在window對(duì)象下尋找它,未定義global時(shí)會(huì)使用name的值代替global值進(jìn)行尋找 // url依賴(lài)baseURL,且url值為“http://”、“https://”開(kāi)頭時(shí)可直接載入外網(wǎng)js庫(kù) { format: "iife", name: "lodash", global: "_", url: "iife/lodash" } ] } );
【注意】雖然插件的載入是異步執(zhí)行的,但請(qǐng)不必?fù)?dān)心,它們會(huì)根據(jù)plugin數(shù)組按順序進(jìn)行安裝,這對(duì)于擁有依賴(lài)的插件是很有用的,你可以在plugin屬性中先載入被依賴(lài)的插件,這樣,依賴(lài)它們的插件就可以順利獲取到它們了。使用插件
被載入的插件可在模塊、組件以及其他插件中使用,你可以在模塊、組件的所有生命周期函數(shù)以及插件的build函數(shù)中直接通過(guò)插件名接收插件實(shí)體對(duì)象,這也是極為簡(jiǎn)單的,如在一個(gè)模塊中使用 switch 插件:
new am.Module ( { // 使用插件名直接接收,switch插件將會(huì)自動(dòng)注入到init、mounted函數(shù)中 // 其他生命周期函數(shù)中也使用此方法注入對(duì)應(yīng)插件實(shí)體 init : function ( switch ) { ... }, mounted : function ( switch ) { ... }, // ... } );預(yù)定義插件
Amaple框架中有util、http、event、promise四個(gè)預(yù)定義插件,它們可以直接在生命周期函數(shù)中接收,而不需要在配置對(duì)象plugin屬性中顯式引入。
此小節(jié)主要介紹四個(gè)預(yù)定義插件的使用方法,但插件使用在A(yíng)maple中并不是必須的,所以如果你想更快看完此教程,可先跳過(guò)此小節(jié)的學(xué)習(xí)。# 工具函數(shù)插件util 類(lèi)型:Object 描述:
js工具函數(shù)集合
對(duì)象屬性:類(lèi)型:Function
描述:判斷數(shù)據(jù)類(lèi)型,與“typeof”關(guān)鍵字相比,它還可以判斷null和Array兩個(gè)數(shù)據(jù)類(lèi)型
參數(shù):
arg|any:需判斷類(lèi)型的數(shù)據(jù)
返回值:傳入?yún)?shù)的數(shù)據(jù)類(lèi)型
類(lèi)型:Function
描述:循環(huán)遍歷一個(gè)對(duì)象,使用方法與array.forEach類(lèi)似。但它還可以遍歷類(lèi)數(shù)組如Node.childNodes、Node.attributes等,且當(dāng)傳入的參數(shù)不可遍歷時(shí)將直接返回。參數(shù)callback為循環(huán)遍歷時(shí)的回調(diào)函數(shù),它分別接收遍歷項(xiàng)的值、遍歷下表、遍歷變量本身三個(gè)參數(shù),當(dāng)回調(diào)函數(shù)返回false時(shí)將break結(jié)束本次循環(huán),而且此時(shí)foreach執(zhí)行結(jié)束后也將會(huì)返回一個(gè)false,這在結(jié)束多層循環(huán)遍歷時(shí)很有用,開(kāi)發(fā)者可以通過(guò)“return foreach(...)”再次推出上層循環(huán)。
參數(shù):
target|ArrayLike、Object:循環(huán)遍歷的目標(biāo)變量值
callback|Function:循環(huán)遍歷時(shí)的回調(diào)函數(shù),它分別接收遍歷項(xiàng)的值、遍歷下表、遍歷變量本身三個(gè)參數(shù),返回false可結(jié)束循環(huán)遍歷
返回值:無(wú)
類(lèi)型:Function
描述:判斷一個(gè)數(shù)組或?qū)ο笫欠駷榭眨瑱z查對(duì)象時(shí)它只會(huì)檢查該對(duì)象本身的成員屬性
參數(shù):
object|Array、Object:待判斷的數(shù)組會(huì)對(duì)象
返回值:空時(shí)為true,不空時(shí)為false
類(lèi)型:Function
描述:判斷一個(gè)對(duì)象是否為純粹的Object數(shù)據(jù)對(duì)象
參數(shù):
object|Object:待判斷對(duì)象
返回值:是則返回true,不是則返回false
類(lèi)型:Function
描述:獲取唯一標(biāo)識(shí)
參數(shù):無(wú)
返回值:唯一標(biāo)識(shí)
# Ajax插件http 類(lèi)型:Object 描述:Ajax網(wǎng)絡(luò)請(qǐng)求插件,它的對(duì)象函數(shù)get、post、request都實(shí)現(xiàn)了
Promise/A+規(guī)范,在定義回調(diào)函數(shù)上,除了普通的異步回調(diào)函數(shù)傳參外,還支持使用鏈?zhǔn)秸{(diào)用的方式來(lái)實(shí)現(xiàn)異步回調(diào)函數(shù)的調(diào)用,例如http.get(...).done(function(result) {...}).fail(function(error){...})或http.get(...).then(function(result){}, function(error){...}),來(lái)指定成功與失敗的回調(diào)函數(shù),如果在Promise對(duì)象上和回調(diào)函數(shù)傳參上同時(shí)指定了回調(diào)函數(shù),則會(huì)執(zhí)行傳參回調(diào)函數(shù)。成功回調(diào)函數(shù)successHandler將接收的參數(shù)為響應(yīng)內(nèi)容response、響應(yīng)狀態(tài)碼status,響應(yīng)狀態(tài)內(nèi)容statusText及自定義XHR對(duì)象amXHR,amXHR對(duì)象屬性詳細(xì)如下:
setRequestHeader(header: String, value: String)
描述:設(shè)置請(qǐng)求頭,請(qǐng)求執(zhí)行前設(shè)置有效
參數(shù):
header|String:請(qǐng)求頭名稱(chēng)
value|String:請(qǐng)求頭值
返回值:無(wú)
getResponseHeader(header: String)
描述:獲取返回頭信息,請(qǐng)求響應(yīng)后可獲取
參數(shù):
header|String:返回頭名稱(chēng)
返回值:對(duì)應(yīng)的返回頭信息
getAllResponseHeaders()
描述:獲取所有返回頭信息,請(qǐng)求響應(yīng)后可獲取
參數(shù):無(wú)
返回值:所有返回頭信息
overrideMimeType(mimetype: String)
描述:設(shè)置mimeType,請(qǐng)求執(zhí)行前設(shè)置有效
參數(shù):
mimetype|String:mimeType值
返回值:無(wú)
abort(statusText: String)
描述:觸發(fā)請(qǐng)求中斷回調(diào),在支持請(qǐng)求中斷且請(qǐng)求響應(yīng)前有效
參數(shù):
statusText|String:中斷信息,開(kāi)發(fā)者可在中斷回調(diào)中的statusText獲取到
返回值:無(wú)
http插件對(duì)象函數(shù):- 類(lèi)型:Function - 描述:執(zhí)行Ajax GET請(qǐng)求,它將返回一個(gè)Promise對(duì)象用于以鏈?zhǔn)秸{(diào)用的方式來(lái)實(shí)現(xiàn)異步回調(diào)函數(shù) - 參數(shù): - url|String:請(qǐng)求url - args?|String、Object:get提交的數(shù)據(jù),此參數(shù)傳入String時(shí)以“k1=v1&k2=v2”的格式傳入,傳入Object時(shí)為一個(gè)數(shù)據(jù)對(duì)象 - callback?|Function:請(qǐng)求成功回調(diào)函數(shù),。它 - dataType?|String:設(shè)置響應(yīng)內(nèi)容的格式,可選為“TEXT/JSON/SCRIPT/JSONP”(可忽略大小寫(xiě)),默認(rèn)為“TEXT” - 返回值:Promise對(duì)象
- 類(lèi)型:Function - 描述:執(zhí)行Ajax POST請(qǐng)求,它將返回一個(gè)Promise對(duì)象用于以鏈?zhǔn)秸{(diào)用的方式來(lái)實(shí)現(xiàn)異步回調(diào)函數(shù) - 參數(shù): - url|String:請(qǐng)求url - args?|String、Object:post提交的數(shù)據(jù),此參數(shù)傳入String時(shí)以“k1=v1&k2=v2”的格式傳入,傳入Object時(shí)為一個(gè)數(shù)據(jù)對(duì)象 - callback?|Function:請(qǐng)求成功回調(diào)函數(shù),如果傳入此參數(shù)則以它為回調(diào)函數(shù)執(zhí)行。它將接收的參數(shù)為響應(yīng)內(nèi)容response、響應(yīng)狀態(tài)碼status,響應(yīng)狀態(tài)內(nèi)容statusText及自定義XHR對(duì)象amXHR - dataType?|String:設(shè)置響應(yīng)內(nèi)容的格式,可選為“TEXT/JSON/SCRIPT/JSONP”(可忽略大小寫(xiě)),默認(rèn)為“TEXT” - 返回值:Promise對(duì)象
- 類(lèi)型:Function - 描述:執(zhí)行Ajax請(qǐng)求,相比于get、post函數(shù),它可以完成更復(fù)雜的請(qǐng)求操作,且此函數(shù)可直接在data屬性中傳入帶有上傳文件的form表單元素或FormData對(duì)象實(shí)現(xiàn)文件上傳操作,當(dāng)在低版本瀏覽器使用form表單元素上傳時(shí)將自動(dòng)使用隱藏iframe刷新的方式上傳,但在支持FormData對(duì)象的瀏覽器中自動(dòng)使用FormData對(duì)象實(shí)現(xiàn)文件上傳 - 參數(shù): - options|Object:可選屬性詳情如下: - method?|String:請(qǐng)求類(lèi)型,GET或POST,大小寫(xiě)不敏感,默認(rèn)為GET - url|String: 請(qǐng)求地址 - data?|String:提交的額外參數(shù),可選為格式為k1=v1&k2=v2的字符串、{k1:v1, k2:v2}的數(shù)據(jù)對(duì)象、FormData對(duì)象及form表單元素對(duì)象,當(dāng)data為form對(duì)象時(shí),如果也提供了src參數(shù)則優(yōu)先使用src參數(shù)當(dāng)做url進(jìn)行提交 - async?|Boolean:是否異步請(qǐng)求,默認(rèn)為true - cache?|Boolean:請(qǐng)求緩存,如果為false,則每次都會(huì)發(fā)送請(qǐng)求,默認(rèn)為true - contentType|String:請(qǐng)求參數(shù)編碼 - dataType?|String:返回的數(shù)據(jù)類(lèi)型,TEXT/JSON/SCRIPT/JSONP,大小寫(xiě)不敏感,默認(rèn)為T(mén)EXT - username?|String:服務(wù)器認(rèn)證用戶(hù)名 - password?|String:服務(wù)器認(rèn)證密碼 - mimeType?|String:設(shè)置mimeType - headers?|Object:額外的請(qǐng)求頭信息,為一個(gè)對(duì)象 - timeout?|Number:請(qǐng)求超時(shí)時(shí)間 - beforeSend?|Function:請(qǐng)求發(fā)送前回調(diào),函數(shù)參數(shù)為amXHR對(duì)象、當(dāng)前配置對(duì)象options - success?|Function:請(qǐng)求成功后回調(diào),函數(shù)參數(shù)為data、statusText、amXHR對(duì)象 - error?|Function:請(qǐng)求失敗后回調(diào),函數(shù)參數(shù)為amXHR對(duì)象、statusText - complete?|Function:請(qǐng)求完成后回調(diào),函數(shù)參數(shù)為amXHR對(duì)象、statusText - abort?|Function:請(qǐng)求中斷后回調(diào),函數(shù)參數(shù)為statusText - 返回值:Promise對(duì)象# 自定義事件插件event 類(lèi)型:Object 描述:
自定義事件對(duì)象,支持跨模塊觸發(fā)事件
對(duì)象函數(shù):類(lèi)型:Function
描述:綁定自定義事件,參數(shù)types以空格分隔開(kāi)可同時(shí)綁定一個(gè)回調(diào)函數(shù)到多個(gè)事件類(lèi)型上
參數(shù):
types|String:自定義事件名稱(chēng),使用空格隔開(kāi)可同時(shí)綁定一個(gè)監(jiān)聽(tīng)函數(shù)到多個(gè)事件類(lèi)型上listener|Function:事件回調(diào)函數(shù)
once?|Boolean:是否只能觸發(fā)一次,設(shè)置為true時(shí),觸發(fā)一次回調(diào)后將自動(dòng)解除綁定
返回值:無(wú)
類(lèi)型:Function
描述:觸發(fā)自定義事件,當(dāng)一個(gè)事件有多個(gè)回調(diào)函數(shù)時(shí)觸發(fā)后將順序執(zhí)行多個(gè)回調(diào)函數(shù)
參數(shù):
types|String:自定義事件名稱(chēng),使用空格隔開(kāi)可同時(shí)觸發(fā)多個(gè)事件
返回值:無(wú)
類(lèi)型:Function
描述:解綁事件,可一次解綁多個(gè)類(lèi)型的事件
參數(shù):
types|String:自定義事件名稱(chēng),使用空格隔開(kāi)可同時(shí)解綁多個(gè)事件
listener|Function:事件回調(diào)函數(shù),必須與綁定事件時(shí)傳入的回調(diào)函數(shù)相同才可成功解綁
返回值:無(wú)
# 異步操作同步化插件promise 類(lèi)型:Class 描述:Promise/A+規(guī)范 規(guī)范實(shí)現(xiàn)類(lèi),用于以同步的方式去執(zhí)行回調(diào)函數(shù),而不用將回調(diào)函數(shù)傳入執(zhí)行函數(shù)中,更加符合邏輯,且在需要執(zhí)行多重回調(diào)處理時(shí),以鏈?zhǔn)浇Y(jié)構(gòu)來(lái)表示函數(shù)處理后的回調(diào)。
成員函數(shù):類(lèi)型:Function
描述:指定成功與失敗的回調(diào)函數(shù),返回值為Promise對(duì)象,如果有多重異步回調(diào)則可以在此函數(shù)后繼續(xù)鏈?zhǔn)秸{(diào)用來(lái)指定后續(xù)的異步回調(diào)函數(shù)
參數(shù):
onFulfilled|Function:成功時(shí)的回調(diào)函數(shù)
onRejected?|Function:失敗時(shí)的回調(diào)函數(shù)
返回值:Promise對(duì)象
類(lèi)型:Function
描述:指定成功的回調(diào)函數(shù),相當(dāng)于調(diào)用then函數(shù)只傳入有效的成功回調(diào)
參數(shù):
onFulfilled|Function:成功時(shí)的回調(diào)函數(shù)
返回值:Promise對(duì)象
類(lèi)型:Function
描述:指定失敗的回調(diào)函數(shù),相當(dāng)于調(diào)用then函數(shù)只傳入有效的失敗回調(diào)
參數(shù):
onRejected|Function:失敗時(shí)的回調(diào)函數(shù)
返回值:Promise對(duì)象
類(lèi)型:Function
描述:綁定執(zhí)行完成的回調(diào)函數(shù),無(wú)論執(zhí)行函數(shù)成功與失敗都將調(diào)用此方法綁定的回調(diào)函數(shù)
參數(shù):
callback|Function:執(zhí)行完成的回調(diào)函數(shù)
返回值:Promise對(duì)象
繼續(xù)學(xué)習(xí)下一節(jié):【AmapleJS教程】6. 路由配置
也可回顧上一節(jié):【AmapleJS教程】4. 組件
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/51743.html
摘要:體驗(yàn)優(yōu)先的單頁(yè)框架點(diǎn)此查看倉(cāng)庫(kù)是專(zhuān)為單頁(yè)應(yīng)用而設(shè)計(jì)的基于頁(yè)面模塊化的框架,它可使開(kāi)發(fā)者快速開(kāi)發(fā)單頁(yè)應(yīng)用。使用前置要求此框架的使用者可不需了解構(gòu)建工具,但必須掌握和的基礎(chǔ)知識(shí)。 showImg(https://segmentfault.com/img/bV2wO3?w=792&h=303); Amaple · 體驗(yàn)優(yōu)先的JavaScript單頁(yè)框架 Amaple (點(diǎn)此查看Github倉(cāng)...
摘要:體驗(yàn)優(yōu)先的單頁(yè)框架點(diǎn)此查看倉(cāng)庫(kù)是專(zhuān)為單頁(yè)應(yīng)用而設(shè)計(jì)的基于頁(yè)面模塊化的框架,它可使開(kāi)發(fā)者快速開(kāi)發(fā)單頁(yè)應(yīng)用。使用前置要求此框架的使用者可不需了解構(gòu)建工具,但必須掌握和的基礎(chǔ)知識(shí)。 showImg(https://segmentfault.com/img/bV2wO3?w=792&h=303); Amaple · 體驗(yàn)優(yōu)先的JavaScript單頁(yè)框架 Amaple (點(diǎn)此查看Github倉(cāng)...
摘要:體驗(yàn)優(yōu)先的單頁(yè)框架點(diǎn)此查看倉(cāng)庫(kù)是專(zhuān)為單頁(yè)應(yīng)用而設(shè)計(jì)的基于頁(yè)面模塊化的框架,它可使開(kāi)發(fā)者快速開(kāi)發(fā)單頁(yè)應(yīng)用。使用前置要求此框架的使用者可不需了解構(gòu)建工具,但必須掌握和的基礎(chǔ)知識(shí)。 showImg(https://segmentfault.com/img/bV2wO3?w=792&h=303); Amaple · 體驗(yàn)優(yōu)先的JavaScript單頁(yè)框架 Amaple (點(diǎn)此查看Github倉(cāng)...
閱讀 1958·2021-11-16 11:45
閱讀 3668·2021-09-06 15:02
閱讀 2013·2019-08-30 15:44
閱讀 2283·2019-08-30 11:21
閱讀 1845·2019-08-29 16:31
閱讀 3422·2019-08-29 13:55
閱讀 1895·2019-08-29 12:15
閱讀 3251·2019-08-28 18:05