web-dev-qa-db-ja.com

断続的な「セレクターを介した要素の検索はjqLit​​eではサポートされていません!」 RequireJSでAngularJSをロードするとき

RequireJSを介してAngularJSをロードします。 ほとんどの場合、問題はありませんしかし、たまにエラーが表示されます:

不明なエラー:[jqLit​​e:nosel]セレクターを介した要素の検索は、jqLit​​eではサポートされていません。

私はすべてが実際にロードされていることを知っているので、RequireJSがファイルを見つけられないという問題はありません。

私のRequireJS設定は次のとおりです。

require.config({
 baseUrl: 'lib/',
 paths: {
   jquery: 'external/jquery-2.1.1',
   angular: 'external/angular',
 },
 shim: {
   angular: {
       exports: "angular"
   },
 },
});

RequireJSをロードしてロードをキックスタートする方法は次のとおりです。

<script type="text/javascript" src="lib/requirejs/require.js"></script>
<script type="text/javascript" src="requirejs-config.js"></script>
<script>
  require(["start"]);
</script>

私はAngularJS 1.3.0とRequireJS 2.1.15を使用しています。

29
Louis

このような断続的な問題は、通常どこかで依存関係が欠落しているためです。ほとんどの場合、モジュールは正しい順序でロードされますが、それは偶然によるものです。時々、運があなたの側になく、あなたは望ましくない結果を得ます。

問題は、AngularJSがオプションでのみjQueryを使用することです。存在する場合、AngularJSはそれを使用します。存在しない場合、AngularJSはjqLit​​eライブラリを使用します。これは、AngularJSにバンドルされており、jQueryでできることのサブセットをサポートします。重要な違いの1つは、次のようなステートメントがあることです。

angular.element('[ng-controller="something"]')

angularJSでjQueryを使用できる場合にのみ機能し、jqLit​​eが代わりに使用されている場合は機能しません。 RequireJSがjQueryの前にAngularJSをロードすると、AngularJSはjQueryなしで機能し、ステートメントは失敗します。

これはAngularJSシムを次のように変更することで修正できます

 shim: {
   angular: {
       deps: ['jquery'],
       exports: "angular"
   },
 },
27
Louis

JQueryに依存したくない場合は、ブラウザバージョン、代わりに

angular.element('.mySelector');

つかいます

angular.element(document.querySelector('.mySelector'));

here を参照して、どの document.querySelectorをサポートするブラウザー を確認してください。

30
ccpizza

後世-このエラーは、空のテンプレート文字列(動的に生成されたものなど)をコンパイルしようとした場合にも発生する可能性があります。

var someTemplate = "";
$compile(someTemplate); // throws (with jQuery lite at least)
0
eddiewould