ng1-module-decorator
我們都知道Angular2結合TypeScipt使用@NgModule裝飾器裝飾模組是非常方便的,而在angular1.x中我們只能使用angular.module().xxxx
來進行模組的組合,如果一個模組的功能非常多,這樣寫會是非常令人苦惱且不易維護的。
幸而在ES6誕生之後,語言本身提供了裝飾器的功能,雖然沒有typescript那麼強大,卻也能滿足我們的需求了。於是寫了一個裝飾器的函式庫,讓我們在angular1.x中也能像angular2中一樣使用@NgModule功能。本人在實際專案中親測,可以有效的縮短開發週期。
github地址:ng1-module-decorator
使用樣例
話不多說,下面我們來看一下實際的使用效果,具體的程式碼示例請檢視上面的github地址。
//匯入裝飾器
import NgModule from 'ng1-module-decorator';
//或 let NgModule = require('ng1-module-decorator');
//配置塊和執行塊
import { appConfig } from './app.config';
import { appRun } from './app.run';
//app元件
import { appComponent } from './component/app/app.component';
import { appState } from './component/app/app.state';
//home元件
import { homeComponent } from './component/home/home.component';
import { homeState } from './component/home/home.state';
//控制器
import { myController } from './share/controllers/myController';
//指令
import { greeting } from './share/directives/greeting';
//過濾器
import { replaceHello } from './share/filters/replaceHello';
//服務
import { greetService } from './share/services/greetService';
import { apiPath } from './share/services/apiPath';
import { colorService } from './share/services/colorService';
@NgModule({
name: 'app', //模組名,必填
imports: ['ui.router'], //匯入模組,根模組必須匯入uiRouter模組,其他可選
configBlocks: [appConfig], //配置塊函式,可選
runBlocks: [appRun], //執行塊函式,可選
states: [ //路由狀態,可選
appState,
homeState
],
components: { //元件,可選
appComponent,
homeComponent
},
directives: {greeting}, //指令,可選
controllers: {myController}, //控制器,可選
filters: {replaceHello}, //過濾器,可選
providers: {colorService}, //提供者,可選
services: {greetService}, //服務,可選
constants: {apiPath}, //常量服務,可選
decorators: {} //裝飾器,可選
})
class Module {}
//匯出模組:通過name屬性匯出模組,不用需要關注模組名是什麼
export const AppModule = new Module().name;
複製程式碼
在這裡我們使用name
後設資料指定了模組的名稱,使用imports
匯入了其他的模組,然後注入了其他的一些後設資料,最終構成了我們的這個AppModule模組。雖然在這裡元件、路由、指令、服務很多,但是我們的程式碼看起來非常清晰明瞭,且隨著專案的增長,這種簡單性將依然保持,這對於我們以後進行專案重構或者維護是極其方便的。
在這裡分享出來,希望能夠幫助到一些有類似需求的朋友。如果您喜歡的話,別忘了在github上給個星喔^_^。