成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

avalon 單頁面程序 (種子工程)之二 按需加載和路由系統(tǒng)

fanux / 1305人閱讀

摘要:的成功離開不這三個東西,分層架構(gòu),路由系統(tǒng),儲存系統(tǒng)。分層架構(gòu)是我們組織復(fù)雜代碼的關(guān)鍵,路由系統(tǒng)是將多個頁面壓縮在一個頁面的關(guān)鍵。在這個種子工程中,我都調(diào)用了同一個方法,就比較適合目錄動態(tài)生成,需要按需調(diào)用不同的頁面的情況。

SPA的成功離開不這三個東西,分層架構(gòu),路由系統(tǒng),儲存系統(tǒng)。分層架構(gòu)是我們組織復(fù)雜代碼的關(guān)鍵,路由系統(tǒng)是將多個頁面壓縮在一個頁面的關(guān)鍵。 其中avalon路由用到了兩個多帶帶獨立出來的類庫 mmRouter 和 mmHistory。

路由有什么作用呢?

路由其實可以理解成 網(wǎng)站上不同的網(wǎng)頁地址, 如果不是SPA的網(wǎng)站, 瀏覽器的前進(jìn)后退,鏈接到了一個新的頁面,整個頁面重新刷新; 但如果是SPA網(wǎng)站,因為整個頁面是不需要全部刷新的,網(wǎng)站的頁面也停留在當(dāng)前頁面,那么怎么解決瀏覽器的前進(jìn)后退問題呢, 怎么解決需要定位到特定網(wǎng)頁地址的問題呢,所以SPA就引入了路由系統(tǒng)。 下面我們看看路由是怎么實現(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)用戶在頁面點擊這個地址的時候,觸發(fā)callback回調(diào),每個路由可以多帶帶定義一個callback方法。在這個種子工程中,我都調(diào)用了同一個callback方法,就比較適合目錄動態(tài)生成,需要按需調(diào)用不同的頁面的情況。 在這里執(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)用戶在頁面點擊這個地址的時候,觸發(fā)callback回調(diào),
    每個路由可以多帶帶定義一個callback方法。在這個種子工程中,我都調(diào)用了同一個callback方法,就比較適合
    目錄動態(tài)生成,需要按需調(diào)用不同的頁面的情況*/
    avalon.router.get("/sub1/index", callback)
    avalon.router.get("/sub2/index", callback)
    avalon.history.start({
        basepath: "/avalon"
    })
    avalon.scan()
});

html頁面:
結(jié)構(gòu)比較簡單,我們就定義了兩個a 標(biāo)簽,地址前面加上#!, 這個是avalon特有的寫法,angularjs是#




    
    avalon工程
    


    


執(zhí)行結(jié)果

當(dāng)點擊導(dǎo)航1,或者導(dǎo)航2,分別在瀏覽器 控制臺中輸出了/sub1/index和 /sub2/index

按需加載js和子頁面html模板

一個項目都會由好多個子頁面和js組成, 就單頁面程序來講, 你可以把js進(jìn)行合并,然后按需加載部分子頁面html. 也可以按需加載js和html . 我在這里用的是按需加載js, 再由js中的requirejs text 類庫來加載html文件。

index.html增加子頁面替換標(biāo)簽

在首頁index.html中增加這段代碼

, avalon中ms-include-src是用來加載模板用的




    
    avalon工程
    


    

    
修改main.js中導(dǎo)航回調(diào)函數(shù)
    //導(dǎo)航回調(diào)
    function callback() {
        var jspath = "modules"; //這里改成您自己的網(wǎng)站地址 ,這個是js路徑的變量
        var pagepath = "";       //這個是網(wǎng)頁的變量

        //這段代碼的作用是按照路由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é)果

分別點擊導(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78582.html

相關(guān)文章

  • avalon 頁面程序種子工程)之一 用requirejs引入avalon

    摘要:現(xiàn)在微軟終于痛定思痛決定放棄了不支持的安全更新,對我們前端來說,真的是重大利好啊言歸正傳,這篇文章的目的就是把怎么用構(gòu)建一個單頁面程序介紹以下,是對自己的一個總結(jié),也喜歡對大家有一定的借鑒作用,寫的不好不對的地方希望大家多評論評論謝謝。 這篇文章是寫在公司項目結(jié)束之后的,因為我個人不太會把沒有實踐過的東西寫出來,實踐是檢驗真理的唯一標(biāo)準(zhǔn)么,用的怎么樣,好不好用,在成熟實踐過的項目上能體...

    solocoder 評論0 收藏0
  • 【轉(zhuǎn)】如何從前端工程師到前端架構(gòu)師

    摘要:之前人家寫過的彈出層,富文本編輯器,語法高亮插件你一套也不能少,這樣你才能接觸到之前碰不到的原生與知識點。通過引入雙向綁定與分層架構(gòu),完全脫離進(jìn)行前端開發(fā)。 原文:http://www.cnblogs.com/rubylouvre/p/3658441.html 作者:司徒正美 偶的《javascript框架設(shè)計》終于出版 歷時兩年多,我的書終于付梓出版了。應(yīng)各方面的要求,寫軟文一篇...

    ShowerSun 評論0 收藏0
  • 發(fā)布基于 Avalon2 的 UI 組件庫與 SPA 腳手架

    摘要:使用前端框架開發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來,誕生了兩個開源項目和。,中文名安逸,是基于的端組件庫。有用于數(shù)據(jù)展示的組件用于數(shù)據(jù)提交的組件用于消息提示的與組件組件和用戶輸入組件等,并且還在不斷完善中。 使用 Avalon 前端框架開發(fā)信息管理系統(tǒng)有三年了,最近半年花了些心血將這三年的積累凝聚起來,誕生了兩個開源項目 ms-bus 和 ane。 ms-b...

    Sike 評論0 收藏0
  • webpack2正式版

    摘要:正式版正式版,簡單方便的構(gòu)建單頁和多頁用用。下一步是完善單元測試,代碼覆蓋率報告如果大家有更好的想法及建議請?zhí)帷i_啟測試并生成覆蓋率報告。頁面的其他資源文件,通過引入單元測試日后調(diào)整,待開發(fā)樣式使用可添加替換預(yù)處理。 webpack2正式版 webpack2正式版,簡單方便的構(gòu)建單頁和多頁用用。(啟用tree-shaking新技術(shù))地址:avalon-webpack-start 這個啟...

    WilsonLiu95 評論0 收藏0
  • webpack+vue項目實戰(zhàn)(三,配置功能操作頁組件的按需加載

    摘要:但是實際上,回款管理和開票管理的組件文件也是加載了。所以下面引用按需加載來處理。是不是小很多了,然后和是按需加載的,就是需要的時候才加載。 1.前言 上篇文章(webpack+vue項目實戰(zhàn)(二,開發(fā)管理系統(tǒng)主頁面)),實現(xiàn)了,側(cè)邊欄的一個操作,點擊側(cè)邊欄的一些操作,最重要的就是路由的切換??戳松弦黄幕锇橐膊浑y發(fā)現(xiàn),除了點擊側(cè)邊欄‘首頁’之外,點擊其它的都是白色的一片。原因我想大家都...

    endless_road 評論0 收藏0

發(fā)表評論

0條評論

fanux

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<