我有幾個「模塊」(aprox.20)具有各自的功能,但都具有相同的結構。每個「模塊」都分佈在不同的文件中。例如管理員「模塊」被存儲在模塊/ admin文件夾,它包括以下文件:Angularjs模塊寬常量最佳實踐
admin.module.js
admin.routes.js
admin.content.jade
admin.content.controller.js
admin.content.controller.spec.js
admin.sidebartop.jade
admin.sidebar.controller.js
admin.sidebar.controller.spec.js
and many more......
所有模塊的所有類似的文件具有相同的碼結構。所有的代碼都封裝在iFi中。
爲了避免錯誤,並進行結構重用容易,我需要定義一些模塊的具體常量和重用控制器,路線這些常量等
我知道的module.config和恆定功能 。這種方法不能完成這項工作,因爲我不能重複使用兩次相同的名稱。這意味着我仍然需要重寫我的代碼的某些部分,而我想保持它不變。
angular.module('app.foo').constant('CONST', {...})
將衝突
angular.module('app.bar').constant('CONST', {...})
於是我想出了以下解決方案,這個工作得很好,但不知何故不覺得正確的計算策略。:
我所有的靜態配置在* .module.js完成文件
(function() {
'use strict';
angular.module('app.admin', [
'app.foo',
'app.bar'
]).CONST ={
module: 'Admin',
state: 'admin',
url : '/admin',
path: 'app/views/modules/admin/',
title: 'Admin',
description: 'This is the admin module',
acl: ['Developer','Administrator'],
tileGroups: ['Company'],
icon: 'mif-books',
badge: 0,
filters :
{'rootNodes' :{where: {'Template.value' : 'Admin'} } },
ready : false
};
})();
我重用* .routes.js配置:
(function() {
'use strict';
var module =angular.module('app.details');
var CONST = module.CONST;
module.run(appRun);
appRun.$inject = [ 'routerHelper'];
/* @ngInject */
function appRun(routerHelper) {
var states = [{
state: CONST.state,
config: {
title: CONST.title,
url: CONST.url,
acl: CONST.acl,
templateUrl: CONST.path + CONST.state + '.content.html',
controller: CONST.module + 'ContentController',
controllerAs: 'vm',
ncyBreadcrumb: {
label: CONST.module
}
}
}
];
routerHelper.configureStates(states);
}
})();
在我所有的* 。* .control.js文件:
(function() {
'use strict';
angular
.module('app.admin')
.controller('AdminContentController', AdminContentController);
AdminContentController.$inject = ['foo', 'bar'];
/* @ngInject */
function DetailsContentController(foo, bar) {
var vm = this;
_.extend(vm, CONST); // for re-usage in my jade/html files
// AND HERE GOES THE ACTUAL CODE
}
})();
此方法的目的是爲了儘量減少neede d在個別文件中,如果某些東西改變「模塊」寬。
例如,如果我將標題從'Admin'更改爲'Administration',則不必在使用標題的所有文件中更改此名稱。此外,我的spec.js文件是自動的,所以如果我更改設置,我的測試將保持機智。
必須有一個少骯髒,多角度解決這個問題的方法?
我試過這個,但是這並沒有完成這項工作。如果我只有1個模塊,這很好。如果我在例如模塊foo中注入CONST,我實際上注入了在admin中定義的CONST的值,而不是在foo中定義的值。 – marcelde
@marcelde角度中的名稱是全局唯一的,所以這是預期的行爲。如果你想在不同的模塊中使用不同的常量,給他們不同的名字。它不會改變你使用它們的方式,因爲現在你正在執行'angular.module('app.foo').CONST'和'angular.module('app.bar').CONST'。相反,只需執行'.constant('fooCONST',...)'和'.constant('barCONST',...)'。你的權利是 – tcooc
建議的解決方案意味着我必須更改所有依賴文件中的注入名稱。爲了保持可讀性,我還必須在代碼本身中更改注入的CONST的名稱。每個「模塊」我有12個依賴文件。 23個模塊.... 23 *(12 + 1)導致299個文件改變和aprox。 11960變化。我的週末過去了。所有類型的方法都可以工作。但由於影響巨大,我正在尋找「最佳」解決方案。很高興找到一種解決方案,使事情變得簡單但靈活且自動化。 – marcelde