Вход

Просмотр полной версии : Динамическая загрузка модуля в Angular


theoddbeard
21.11.2013, 15:07
Как динамически загрузить модуль в 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 динамически.