AngularJS Dynamic carregando um controlador
Eu li muito sobre carregamento lento, mas estou enfrentando um problema ao usar o $ routeProvider.
Meu objetivo é carregar um arquivo javascript que contenha um controlador e adicionar uma rota a este controlador que foi carregado anteriormente.
Conteúdo do meu arquivo javascript para carregar
angular.module('demoApp.modules').controller('MouseTestCtrlA', ['$scope', function ($scope) {
console.log("MouseTestCtrlA");
$scope.name = "MouseTestCtrlA";
}]);
Este arquivo não é incluído quando o bootstap angular é chamado. Isso significa que eu tenho que carregar o arquivo e criar uma rota para este controlador.
Primeiro, comecei a escrever uma função de resolução que tem que carregar o arquivo Javascript. Mas declarar meu parâmetro de controlador na declaração de rota me deu um erro:
'MouseTestCtrlA' não é uma função, ficou indefinido
Aqui está a chamada que estou tentando definir:
demoApp.routeProvider.when(module.action, {templateUrl: module.template, controller: module.controller, resolve : {deps: function() /*load JS file*/} });
Pelo que li, o parâmetro do controlador deve ser um controlador registrado
controller - {(string | function () =} - Controlador fn que deve ser associado ao escopo recém-criado ou ao nome de um controlador registrado se passado como uma string.
Então, eu escrevo uma fábrica que deve ser capaz de carregar meu arquivo e, em seguida, (prometo estilo!) Eu deveria tentar declarar uma nova rota.
Isso me deu algo como abaixo, onde dependencies é uma matriz de caminhos de arquivos javascript para carregar:
Uso
ScriptLoader.load(module.dependencies).then(function () {
demoApp.routeProvider.when(module.action, {templateUrl: 'my-template', controller: module.controller});
});
Carregador de scripts
angular.module('demoApp.services').factory('ScriptLoader', ['$q', '$rootScope', function ($q, $rootScope) {
return {
load: function (dependencies)
{
var deferred = $q.defer();
require(dependencies, function () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
return deferred.promise;
}
}
}]);
Problema
Eu ainda tenho esse erro de javascript "'MouseTestCtrlA' não é uma função, ficou indefinido" o que significa Angular não pôde resolvido 'MouseTestCtrlA' como um controlador registrado.
Alguém pode me ajudar neste ponto por favor?