/ / Como o angular determina se o jQuery está presente? - javascript, angularjs

Como o angular determina se o jQuery está presente? - javascript, angularjs

Porque eu estou começando a situação estranha que objetos angulares como element na função de link de um controlador acaba sendo um objeto jQLite, embora o jQuery esteja definitivamente presente como sendo carregado na memória e usado com sucesso em outro lugar na mesma página.

O FAQ Angular é bastante vago sobre essa questão:

Sim, Angular pode usar jQuery se estiver presente emseu aplicativo quando o aplicativo estiver sendo inicializado. Se o jQuery não estiver presente em seu caminho de script, o Angular retornará à sua própria implementação do subconjunto de jQuery que chamamos de jQLite.

Então, o que exatamente "presente" significa?

Respostas:

4 para resposta № 1

Angular.js usará o jQuery se ele for incluído primeiro, caso contrário, ele usará o próprio jqLite. Se você carregar o jQuery após o AngularJS, o AngularJS se anexará ao jqLite, mas você ainda poderá acessar o jQuery através do $.

Veja abaixo o código usado pelo angular.js para determinar se o jquery está carregado:

  // bind to jQuery if present;
jQuery = window.jQuery;
// Use jQuery if it exists with proper functionality, otherwise default to us.
// Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
// Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
// versions. It will not work for sure with jQuery <1.7, though.
if (jQuery && jQuery.fn.on) {
jqLite = jQuery;
extend(jQuery.fn, {
scope: JQLitePrototype.scope,
isolateScope: JQLitePrototype.isolateScope,
controller: JQLitePrototype.controller,
injector: JQLitePrototype.injector,
inheritedData: JQLitePrototype.inheritedData
});

Alterar a ordem das tags de script pode não acontecer com muita frequência, mas isso pode ocorrer se você começar a modularizar a base de código. Em particular, esta questão aconteceu ao usar alguns carregadores de módulos como o RequireJS.