摘要:的成功離開(kāi)不這三個(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的成功離開(kāi)不這三個(gè)東西,分層架構(gòu),路由系統(tǒng),儲(chǔ)存系統(tǒng)。分層架構(gòu)是我們組織復(fù)雜代碼的關(guān)鍵,路由系統(tǒng)是將多個(gè)頁(yè)面壓縮在一個(gè)頁(yè)面的關(guān)鍵。 其中avalon路由用到了兩個(gè)多帶帶獨(dú)立出來(lái)的類庫(kù) mmRouter 和 mmHistory。
路由有什么作用呢?路由其實(shí)可以理解成 網(wǎng)站上不同的網(wǎng)頁(yè)地址, 如果不是SPA的網(wǎng)站, 瀏覽器的前進(jìn)后退,鏈接到了一個(gè)新的頁(yè)面,整個(gè)頁(yè)面重新刷新; 但如果是SPA網(wǎng)站,因?yàn)檎麄€(gè)頁(yè)面是不需要全部刷新的,網(wǎng)站的頁(yè)面也停留在當(dāng)前頁(yè)面,那么怎么解決瀏覽器的前進(jìn)后退問(wèn)題呢, 怎么解決需要定位到特定網(wǎng)頁(yè)地址的問(wèn)題呢,所以SPA就引入了路由系統(tǒng)。 下面我們看看路由是怎么實(shí)現(xiàn)的:
引入路由 用requriejs 引入avalon路由mmRouter和mmHistory地址:https://github.com/RubyLouvre/mmRouter
用requirejs配置mmRouter和mmHistory在網(wǎng)站中的地址
require.config({//第一塊,配置 baseUrl: "", paths: { avalon: ["js/avalon/avalon"],//必須修改源碼,禁用自帶加載器,或直接刪提AMD加載器模塊 mmHistory: "js/avalon/mmHistory", mmRouter: "js/avalon/mmRouter", } });avalon路由代碼
"/sub1/index"為路由地址, 當(dāng)用戶在頁(yè)面點(diǎn)擊這個(gè)地址的時(shí)候,觸發(fā)callback回調(diào),每個(gè)路由可以多帶帶定義一個(gè)callback方法。在這個(gè)種子工程中,我都調(diào)用了同一個(gè)callback方法,就比較適合目錄動(dòng)態(tài)生成,需要按需調(diào)用不同的頁(yè)面的情況。 在這里執(zhí)行了callback回調(diào)之后, console.log(this.path)輸出了路徑的地址
//requirejs引用mmRouter require(["mmRouter"],function(mmRouter){ avalon.log("引入avalon"); var model = avalon.define({ $id: "root", name: "tangolivesky" }) //路由的導(dǎo)航回調(diào) function callback() { console.log(this.path); } /*avalon路由方法 "/sub1/index"為路由地址, 當(dāng)用戶在頁(yè)面點(diǎn)擊這個(gè)地址的時(shí)候,觸發(fā)callback回調(diào), 每個(gè)路由可以多帶帶定義一個(gè)callback方法。在這個(gè)種子工程中,我都調(diào)用了同一個(gè)callback方法,就比較適合 目錄動(dòng)態(tài)生成,需要按需調(diào)用不同的頁(yè)面的情況*/ avalon.router.get("/sub1/index", callback) avalon.router.get("/sub2/index", callback) avalon.history.start({ basepath: "/avalon" }) avalon.scan() });
html頁(yè)面:
結(jié)構(gòu)比較簡(jiǎn)單,我們就定義了兩個(gè)a 標(biāo)簽,地址前面加上#!, 這個(gè)是avalon特有的寫(xiě)法,angularjs是#
執(zhí)行結(jié)果avalon工程
當(dāng)點(diǎn)擊導(dǎo)航1,或者導(dǎo)航2,分別在瀏覽器 控制臺(tái)中輸出了/sub1/index和 /sub2/index
按需加載js和子頁(yè)面html模板一個(gè)項(xiàng)目都會(huì)由好多個(gè)子頁(yè)面和js組成, 就單頁(yè)面程序來(lái)講, 你可以把js進(jìn)行合并,然后按需加載部分子頁(yè)面html. 也可以按需加載js和html . 我在這里用的是按需加載js, 再由js中的requirejs text 類庫(kù)來(lái)加載html文件。
index.html增加子頁(yè)面替換標(biāo)簽在首頁(yè)index.html中增加這段代碼
, avalon中ms-include-src是用來(lái)加載模板用的修改main.js中導(dǎo)航回調(diào)函數(shù)avalon工程
//導(dǎo)航回調(diào) function callback() { var jspath = "modules"; //這里改成您自己的網(wǎng)站地址 ,這個(gè)是js路徑的變量 var pagepath = ""; //這個(gè)是網(wǎng)頁(yè)的變量 //這段代碼的作用是按照路由path 得到需要加載的js路徑 var paths = this.path.split("/"); for (var i = 0; i < paths.length; i++) { if (paths[i] != "") { jspath += "/" + paths[i]; pagepath += "_" + paths[i]; } } //console.log(jspath); //console.log(pagepath); require([jspath], function (page) { //這段代碼的作用是把pagepath變量 賦給root controller下面的content avalon.vmodels.root.content = pagepath; }); }修改modules/sub1 下面的index.js
同理修改 modules/sub2下面的index.js
sub1下面index.js
define(["avalon", "text!./index.html",], function (avalon,_sub1_index) { avalon.templateCache._sub1_index = _sub1_index })
sub2下面index.js
define(["avalon", "text!./index.html",], function (avalon,_sub2_index) { avalon.templateCache._sub2_index = _sub2_index })
sub1下面index.html
執(zhí)行結(jié)果第一個(gè)頁(yè)面
分別點(diǎn)擊導(dǎo)航1 和 導(dǎo)航2, 按需加載了sub1的index.js、index.html 和 sub2的index.js、index.html
例子我放在了github中 https://github.com/tangolivesky/avalonSPA_Sample
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78582.html
摘要:現(xiàn)在微軟終于痛定思痛決定放棄了不支持的安全更新,對(duì)我們前端來(lái)說(shuō),真的是重大利好啊言歸正傳,這篇文章的目的就是把怎么用構(gòu)建一個(gè)單頁(yè)面程序介紹以下,是對(duì)自己的一個(gè)總結(jié),也喜歡對(duì)大家有一定的借鑒作用,寫(xiě)的不好不對(duì)的地方希望大家多評(píng)論評(píng)論謝謝。 這篇文章是寫(xiě)在公司項(xiàng)目結(jié)束之后的,因?yàn)槲覀€(gè)人不太會(huì)把沒(méi)有實(shí)踐過(guò)的東西寫(xiě)出來(lái),實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)么,用的怎么樣,好不好用,在成熟實(shí)踐過(guò)的項(xiàng)目上能體...
摘要:之前人家寫(xiě)過(guò)的彈出層,富文本編輯器,語(yǔ)法高亮插件你一套也不能少,這樣你才能接觸到之前碰不到的原生與知識(shí)點(diǎn)。通過(guò)引入雙向綁定與分層架構(gòu),完全脫離進(jìn)行前端開(kāi)發(fā)。 原文:http://www.cnblogs.com/rubylouvre/p/3658441.html 作者:司徒正美 偶的《javascript框架設(shè)計(jì)》終于出版 歷時(shí)兩年多,我的書(shū)終于付梓出版了。應(yīng)各方面的要求,寫(xiě)軟文一篇...
摘要:使用前端框架開(kāi)發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來(lái),誕生了兩個(gè)開(kāi)源項(xiàng)目和。,中文名安逸,是基于的端組件庫(kù)。有用于數(shù)據(jù)展示的組件用于數(shù)據(jù)提交的組件用于消息提示的與組件組件和用戶輸入組件等,并且還在不斷完善中。 使用 Avalon 前端框架開(kāi)發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來(lái),誕生了兩個(gè)開(kāi)源項(xiàng)目 ms-bus 和 ane。 ms-b...
摘要:正式版正式版,簡(jiǎn)單方便的構(gòu)建單頁(yè)和多頁(yè)用用。下一步是完善單元測(cè)試,代碼覆蓋率報(bào)告如果大家有更好的想法及建議請(qǐng)?zhí)?。開(kāi)啟測(cè)試并生成覆蓋率報(bào)告。頁(yè)面的其他資源文件,通過(guò)引入單元測(cè)試日后調(diào)整,待開(kāi)發(fā)樣式使用可添加替換預(yù)處理。 webpack2正式版 webpack2正式版,簡(jiǎn)單方便的構(gòu)建單頁(yè)和多頁(yè)用用。(啟用tree-shaking新技術(shù))地址:avalon-webpack-start 這個(gè)啟...
摘要:但是實(shí)際上,回款管理和開(kāi)票管理的組件文件也是加載了。所以下面引用按需加載來(lái)處理。是不是小很多了,然后和是按需加載的,就是需要的時(shí)候才加載。 1.前言 上篇文章(webpack+vue項(xiàng)目實(shí)戰(zhàn)(二,開(kāi)發(fā)管理系統(tǒng)主頁(yè)面)),實(shí)現(xiàn)了,側(cè)邊欄的一個(gè)操作,點(diǎn)擊側(cè)邊欄的一些操作,最重要的就是路由的切換??戳松弦黄幕锇橐膊浑y發(fā)現(xiàn),除了點(diǎn)擊側(cè)邊欄‘首頁(yè)’之外,點(diǎn)擊其它的都是白色的一片。原因我想大家都...
閱讀 2810·2021-11-18 10:02
閱讀 3526·2021-09-22 15:50
閱讀 2428·2021-09-06 15:02
閱讀 3643·2019-08-29 16:34
閱讀 1810·2019-08-29 13:49
閱讀 1345·2019-08-29 13:29
閱讀 3743·2019-08-28 18:08
閱讀 3062·2019-08-26 11:52