angular如何确定jQuery是否存在?

时间:2015-03-23 17:08:50

标签: javascript angularjs

因为我遇到了奇怪的情况,控制器的链接函数中的element等角对象最终成为了一个jQLite对象,尽管jQuery肯定存在于内存中加载并成功用于其他地方同一页。

Angular FAQ在这个问题上相当模糊:

  

是的,当应用程序被引导时,Angular可以使用jQuery,如果它存在于您的应用程序中。如果你的脚本路径中没有jQuery,Angular会回退到我们称之为jQLite的jQuery子集的实现。

那么“现在”究竟是什么意思呢?

1 个答案:

答案 0 :(得分:5)

如果首先包含jQuery,Angular.js将使用jQuery,否则它将使用它自己的jqLit​​e。如果你在AngularJS之后加载jQuery,AngularJS会将自己附加到jqLit​​e,但你仍然可以通过$访问jQuery。

请参阅下面angular.js用来确定是否加载jquery的代码:

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

更改脚本标记的顺序可能不会经常发生,但如果您开始模块化代码库,则可能会发生这种情况。特别是this issue has happened,同时使用了一些像RequireJS这样的模块加载器。