AngularJs - 등록된 모든 모듈의 목록을 가져옵니다.
런타임에 등록된 모든 모듈의 목록을 얻을 수 있습니까?
예를 들어 다음과 같습니다.
// Some code somewhere in some .js file
var module1 = angular.module('module1', []);
// Some code in some other .js file
var module2 = angular.module('module2', []);
// Main .js file
var arrayWithNamesOfAllRegisteredModules = .....
// (result would be: ['module1', 'module2'])
Angular에서는 등록된 모듈 목록을 검색할 수 없습니다(최소한 소스 코드에서 방법을 찾을 수 없었습니다).단, 데코레이션은 가능합니다.angular.module이름을 배열에 저장하는 방법.다음과 같은 경우:
(function(orig) {
angular.modules = [];
angular.module = function() {
if (arguments.length > 1) {
angular.modules.push(arguments[0]);
}
return orig.apply(null, arguments);
}
})(angular.module);
이제 확인할 수 있습니다.angular.modules어레이를 설정합니다.
데모: http://plnkr.co/edit/bNUP39cbFqNLbXyRqMex?p=preview
다음과 같이 간단하게 할 수 있습니다.
console.log(angular.module('ModuleYouWantToInspect').requires);
문자열 배열(의존관계)을 반환해야 합니다.출력에 대해서도 같은 처리를 할 수 있습니다.
angular.element를 지정하면 $injector.modules 배열에는 등록된 모듈 목록이 포함됩니다.
예.
angular.element(document.body).injector().modules
디버깅 중이라면 다음 방법으로 목록을 얻을 수 있습니다.
body를 가진 임의의 모듈에서 run()을 호출하는 코드를 찾거나 추가합니다.다음은 예를 제시하겠습니다.
angular.module('myModule')
.run(function() {})
.run에 브레이크 포인트를 두고 angular.run()에 들어갑니다.스코프에 "modules"라고 불리는 객체가 있는데, 이 객체는 모든 모듈을 이름으로 속성으로 가지고 있습니다.
이것은 다른 모듈 방식에서도 동작하거나 코드에서 액세스 할 수 있습니다.큰 그림을 이해하려고 노력하지 않았습니다.
솔루션 개선
(function(angular) {
var orig = angular.module;
angular.modules = [];
angular.modules.select = function(query) {
var cache = [], reg = new RegExp(query || '.*');
for(var i=0,l=this.length;i< l;i++){
var item = this[i];
if(reg.test(item)){
cache.push(item)
}
}
return cache;
}
angular.module = function() {
var args = Array.prototype.slice.call(arguments);
if (arguments.length > 1) {
angular.modules.push(arguments[0]);
}
return orig.apply(null, args);
}
})(angular);
이제 모듈을 선택할 수 있습니다.
angular.modules.select('app.modules.*')
모듈 트리 만들기:
var app = angular.module('app.module.users', ['ui.router'...]);
var app = angular.module('app.module.users.edit', ['app.modules.users']);
메인 모듈 앱(콘센트 서브 모듈)
angular.module('app', ['ui.bootstrap', 'app.services', 'app.config']
.concat(angular.modules.select('app.module.*')));
@dependq answer와 더불어 종속성이 있는 모듈 목록을 얻을 수 있습니다.
var AngularModules = (function (angular) {
function AngularModules() {
extendAngularModule();
angular.element(document).ready(function () {
getModulesDependencies();
});
}
var extendAngularModule = function () {
var orig = angular.module;
angular.modules = [];
angular.module = function () {
var args = Array.prototype.slice.call(arguments);
var modules = [];
if (arguments.length > 1) {
modules.push(arguments[0]);
}
for (var i = 0; i < modules.length; i++) {
angular.modules.push({
'module': modules[i]
});
}
return orig.apply(null, args);
};
};
var getModulesDependencies = function () {
for (var i = 0; i < angular.modules.length; i++) {
var module = angular.module(angular.modules[i].module);
angular.modules[i].dependencies = module && module.hasOwnProperty('requires') ? module.requires : [];
}
};
return AngularModules;
})(angular);
사용방법:
var modules = new AngularModules();
https://stackoverflow.com/a/19412176/132610,에도 같은 질문이 있습니다.그들이 제안한 내용을 요약하면 다음과 같습니다.
var app = angular.module('app', []);
# app.service(/**your injections*/) etc
# to access to the list of services + injections
app._invokeQueue #has following form:
[
[
'$provide',
'service',
Arguments[
'serviceName',
[
'$dependency1',
'$dependency2',
function(){}
],
]
]
]
여기에는 시간이 지남에 따라 변경될 수 있는 구현 세부 정보가 포함됩니다. 그러나 이 작업을 시도해 보십시오.
- 페이지를 완전히 로드합니다.
- angular.module() 내부에 브레이크 포인트를 설정합니다.
- 콘솔에서 angular.module()을 호출합니다.
- 중단점에 도달하면 모듈 사전을 인쇄합니다.
console.dir(modules)또는 다른 에디터에 복사하고 싶은 경우window.prompt('', JSON.stringify(modules))
이 방법은 백그라운드에서 각도가 모듈이라고 불리는 로드된 모듈의 사전을 구축하기 때문에 작동합니다.또한 모듈이 사전에 표시되도록 모든 모듈의 로드가 완료될 때까지 기다려야 합니다.
언급URL : https://stackoverflow.com/questions/24889783/angularjs-get-list-of-all-registered-modules
'sourcecode' 카테고리의 다른 글
| Wordpress에서 ajax와 함께 양식 제출 (0) | 2023.03.09 |
|---|---|
| jQuery UI에서 여러 정렬 가능한 목록을 서로 연결하려면 어떻게 해야 합니까? (0) | 2023.03.09 |
| ng-repeat에서 이전 항목을 얻는 방법은 무엇입니까? (0) | 2023.03.09 |
| AngularJs ng-repeat, 마지막 항목 앞에 'and'로 구분된 쉼표 (0) | 2023.03.09 |
| mongodb 클라이언트를 로컬 Meteor MongoDB에 연결하는 방법 (0) | 2023.03.09 |