Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Динамическая загрузка модуля в Angular (https://javascript.ru/forum/angular/43088-dinamicheskaya-zagruzka-modulya-v-angular.html)

theoddbeard 21.11.2013 15:07

Динамическая загрузка модуля в Angular
 
Как динамически загрузить модуль в Angular через $http, чтобы потом пользоваться его контроллерами и сервисами?

Загрузка модуля осложнений не вызывает, но при таком коде :
angular.module('dlmod',[])
.controller('dlmodCtrl',function($scope,DLSvc){})
.factory('DLSvc',function(){return ServiceObject;})
app.requires.push('dlmod');

при компиляции Angular не находит контроллер dlmodCtrl, а при таком
angular.module('dlmod',[])
.factory('DLSvc',function(){return ServiceObject;});
app.requires.push('dlmod');
function dlmodCtrl('dlmodCtrl',function($scope,DLSvc){
});

не находит сервис (DLSvcProvider np found). При этом, если данный модуль подгрузить вместе со всем приложением, все работает.

theoddbeard 22.11.2013 01:06

Нашел решение проблемы.
Все дело в том, что после вызова angular.bootstrap нельзя добавить компоненты штатными средствами angular.
Помог такой код:
var app=angular.module('myApp',[]);
app.config(function($controllerProvider,$provide,$compileProvider){

	angular._module = angular.module;
	angular.module = function(name,req){
		var m = angular._module(name,req);
		m.controller = function(name,constructor){
			$controllerProvider.register(name,constructor);
			return this;
		};
		
		m.service = function(name,constructor){
			$provide.service(name,constructor);
			return this;	
		};
		
		m.factory = function(name,constuctor){
			$provide.factory(name,constuctor);
			return this;
		};
		
		m.value=function(name,value){
				$provide.value(name,value);
				return this;
		};
		m.directive=function(name,factory){
				$compileProvider.directive(name,factory);
				return this;
		};
		return m;
	};
	
});


После этого можно подгружать компоненты angular динамически.


Часовой пояс GMT +3, время: 01:49.