RequireJSを介してAngularJSをロードします。 ほとんどの場合、問題はありませんしかし、たまにエラーが表示されます:
不明なエラー:[jqLite:nosel]セレクターを介した要素の検索は、jqLiteではサポートされていません。
私はすべてが実際にロードされていることを知っているので、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を使用しています。
このような断続的な問題は、通常どこかで依存関係が欠落しているためです。ほとんどの場合、モジュールは正しい順序でロードされますが、それは偶然によるものです。時々、運があなたの側になく、あなたは望ましくない結果を得ます。
問題は、AngularJSがオプションでのみjQueryを使用することです。存在する場合、AngularJSはそれを使用します。存在しない場合、AngularJSはjqLiteライブラリを使用します。これは、AngularJSにバンドルされており、jQueryでできることのサブセットをサポートします。重要な違いの1つは、次のようなステートメントがあることです。
angular.element('[ng-controller="something"]')
angularJSでjQueryを使用できる場合にのみ機能し、jqLiteが代わりに使用されている場合は機能しません。 RequireJSがjQueryの前にAngularJSをロードすると、AngularJSはjQueryなしで機能し、ステートメントは失敗します。
これはAngularJSシムを次のように変更することで修正できます
shim: {
angular: {
deps: ['jquery'],
exports: "angular"
},
},
JQueryに依存したくない場合は、で ブラウザバージョン、代わりに
angular.element('.mySelector');
つかいます
angular.element(document.querySelector('.mySelector'));
here を参照して、どの document.querySelectorをサポートするブラウザー を確認してください。
後世-このエラーは、空のテンプレート文字列(動的に生成されたものなど)をコンパイルしようとした場合にも発生する可能性があります。
var someTemplate = "";
$compile(someTemplate); // throws (with jQuery lite at least)