我通过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。
答案 0 :(得分:30)
如果你不想依赖jQuery那么 ,只要你可以强制执行browser version ,而不是
angular.element('.mySelector');
使用
angular.element(document.querySelector('.mySelector'));
答案 1 :(得分:27)
这样的间歇性问题通常是由于某处缺少依赖性。大多数时候你的模块以正确的顺序加载,但这只是偶然的。偶尔,幸运不在你身边,你会得到不良结果。
问题是AngularJS只能选择使用jQuery。如果存在,则AngularJS使用它。如果它不存在,那么AngularJS将使用与AngularJS捆绑在一起的jqLite库,它支持jQuery可以执行的操作的子集。一个重要的区别是声明如下:
angular.element('[ng-controller="something"]')
只有当jQuery可用于AngularJS时,才会起作用,如果使用jqLite,则
将无效。如果RequireJS在jQuery之前加载AngularJS,那么AngularJS将在没有jQuery的情况下工作,语句将失败。
可以通过将AngularJS垫片更改为:
来解决此问题 shim: {
angular: {
deps: ['jquery'],
exports: "angular"
},
},
答案 2 :(得分:1)
对于后代-尝试编译空模板字符串(例如,动态生成的模板字符串)也可能导致此错误:
var someTemplate = "";
$compile(someTemplate); // throws (with jQuery lite at least)