JqLite不支持间断"通过选择器查找元素!"使用RequireJS加载AngularJS时

时间:2014-11-08 15:18:34

标签: javascript angularjs requirejs

我通过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。

3 个答案:

答案 0 :(得分:30)

如果你不想依赖jQuery那么 ,只要你可以强制执行browser version ,而不是

angular.element('.mySelector');

使用

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

请参阅here以找出browsers support document.querySelector

答案 1 :(得分:27)

这样的间歇性问题通常是由于某处缺少依赖性。大多数时候你的模块以正确的顺序加载,但这只是偶然的。偶尔,幸运不在你身边,你会得到不良结果。

问题是AngularJS只能选择使用jQuery。如果存在,则AngularJS使用它。如果它不存在,那么AngularJS将使用与AngularJS捆绑在一起的jqLit​​e库,它支持jQuery可以执行的操作的子集。一个重要的区别是声明如下:

angular.element('[ng-controller="something"]')
只有当jQuery可用于AngularJS时,

才会起作用,如果使用jqLit​​e,则

将无效。如果RequireJS在jQuery之前加载AngularJS,那么AngularJS将在没有jQuery的情况下工作,语句将失败。

可以通过将AngularJS垫片更改为:

来解决此问题
 shim: {
   angular: {
       deps: ['jquery'],
       exports: "angular"
   },
 },

答案 2 :(得分:1)

对于后代-尝试编译空模板字符串(例如,动态生成的模板字符串)也可能导致此错误:

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