前端框架擼起來——根組件

概述

根組件是前端框架的入口,整個應用程式只有一個全局的根組件的實例。根組件可以提供根節點的路由、跳轉登錄頁、退出系統、跳轉後台主頁、跳轉錯誤頁等功能。

組件的定義

根組件的類名定義成App,有兩個參數:id和config。

//id     為應用的根節點的id,即index.html文件中div的id
//config 為應用的全局配置對象
function App(id, config) {
    var _elem = $('#' + id);//根節點
}

創建路由

這裡我們創建應用程式根節點的路由對象,在路由導航之前,我們可以在路由的 before 中添加登錄驗證,在路由 after 中添加組件渲染後的共用邏輯。在組件路由之前,我們要將系統登錄的用戶資訊傳遞給每個組件,供組件內部直接訪問。

var _router = new Router(_elem, {
    before: function (item) {
        var component = item.component;
        //如果組件不是Login且組件用戶不存在,則跳轉到登錄組件
        if (!(component instanceof Login) && !component.user) {
            _showLogin();
            return false;
        }
        return true;
    },
    after: function (item) {
        //這裡是組件渲染後的共用邏輯,例如一些jQuery插件的初始化寫在此處
    }
});

//下面是路由方法
function _route(item) {
    //給路由組件增加user屬性,取當前登錄用戶
    item.component.user = _getUser();
    _router.route(item);
}

後台首頁(admin)

這個方法是登錄組件登錄成功後,可通過根組件實例調用此方法顯示後台首頁。

//user 為登錄用戶資訊
this.admin = function (user) {
    _setUser(user);//存儲當前登錄用戶
    _route({ component: new Admin() });//導航到後台首頁組件
}

登錄系統(login)

調用該方法可以跳轉到登錄頁面。

this.login = function () {
    _route({ component: new Login(config) });//導航到登錄組件
}

退出系統(logout)

調用該方法,將清除用戶資訊並導航到登錄頁面。

this.logout = function () {
    _setUser(null);//清除用戶資訊
    _showLogin();//顯示登錄頁面
}

根節點的實例

一個應用程式只需要實例化一次根組件App,可以通過config參數注入框架中需要實現個性化需求的功能,例如配置應用程式的名稱,資源文件的路徑等等。

var app = new App('app', {
    AppName: 'Known UI',
    ImagePath: '/static/imgs'
});

下一章我們實現框架的登錄組件Login。

Gitee: //gitee.com/known/kui
Github: //github.com/known/kui