/ / carregamento de módulos angulares após a angular ser inicializada - javascript, angularjs, requirejs, amd

carregando módulos angulares depois que o angular é inicializado - javascript, angularjs, requirejs, amd

eu uso requirejs para carregamento angular e módulos angulares.

Quero exigir todos os módulos necessários (por exemplo, angular-sanitize.js) juntos.

No meu require.config Eu defino a seguinte regra:

require.config({
path: {
"angular":"libs/angular-modules"
},
shim: {
"angular": {
deps: ["libs/angular"],
exports: "angular"
},
...
}
});

E em libs / angular-modules.js Eu defino o seguinte módulo:

define(
[
"libs/angular-sanitize",
"libs/angular-animate"
],
function () {
return angular;
}
);

Espero que no momento do carregamento dos módulos angular.js já estará carregado. Mas às vezes eu recebo erro:

Cannot read property "$$minErr" of undefined angular-sanitize.js:8

Esta é a oitava linha do angular-sanitize.js:

var $sanitizeMinErr = angular.$$minErr("$sanitize");

Então isso significa que o angular.js arquivo não foi carregado, mas na guia rede vejo que estava. Eu acho que no momento da inicialização higienizar angular módulo angular.js foi carregado, mas não foi inicializado (window.angular ainda não foi definido).

Como posso determinar que angular foi inicializado?

Respostas:

0 para resposta № 1

Eu esperaria ver um calço para angular-sanitize na sua configuração RequireJS:

shim: {
... [whatever you already have] ,

"angular-sanitize": {
deps: ["angular"],
},
}

Eu não coloquei um exports opção porque não tenho certeza do que faria sentido lá. Para os módulos AngularJS, não esperaria que algo fosse requeridos para exports.

A regra geral é que se você abrir a fonte da biblioteca e não conseguir encontrar a chamada define por si só, então precisa de um calço. angular-animate provavelmente também precisa de um calço.


0 para resposta № 2

Você pode carregar preguiçosamente suas dependências na resolução de configuração de rota. Retorne uma promessa e use Require para carregar primeiro essas dependências e resolva a promessa:

.when("/login", {
templateUrl: appConfig.getUrl("login"),
resolve: { load: ["$q", "$rootScope", "$log", function ($q, $rootScope, $log) {
var deferred = $q.defer();
require(appConfig.getDeps("login"), function () {
$rootScope.$apply(function () {
forms.hideError();
deferred.resolve();
});
});
return deferred.promise;
}]
}
})


-1 para resposta № 3

O AngularJs ainda não suporta carregamento lento ...

Existem algumas coisas flutuando na internet que supostamente permitem carregamento lento, mas na minha opinião elas são bagunçadas e inchadas demais para um benefício mínimo

requireJS não funcionará com angular por esse motivo