/ / ¿Cómo determina angular si jQuery está presente? - javascript, angularjs

¿Cómo determina angular si jQuery está presente? - javascript, angularjs

Porque estoy teniendo la extraña situación que a los objetos angulares les gusta. element en la función de enlace de un controlador, termina siendo un objeto jQLite, aunque jQuery está definitivamente presente, ya que se carga en la memoria y se usa con éxito en otra parte de la misma página.

El FAQ Angular es bastante vago en esa pregunta:

Sí, Angular puede usar jQuery si está presente ensu aplicación cuando la aplicación está siendo bootstrapped. Si jQuery no está presente en la ruta de su script, Angular recurre a su propia implementación del subconjunto de jQuery que llamamos jQLite.

Entonces, ¿qué significa exactamente "presente"?

Respuestas

4 para la respuesta № 1

Angular.js usará jQuery si se incluye primero, de lo contrario usará su propio jqLite. Si carga jQuery después de AngularJS, AngularJS se adjunta a jqLite pero aún puede acceder a jQuery a través de $.

Vea a continuación el código utilizado por angular.js para determinar si jquery está cargado:

  // 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
});

Es posible que el cambio de orden de las etiquetas de script no sea muy frecuente, pero podría ocurrir si comienza a modularizar el código base. En particular, este problema ha sucedido Durante el uso de algunos cargadores de módulos como RequireJS.