在没有使用jQuery引导AngularJS时,选择器未被实现。

8 浏览
0 Comments

在没有使用jQuery引导AngularJS时,选择器未被实现。

我一直在使用这段代码来启动AngularJS:

angular.bootstrap(angular.element("body")[0], ["stApp"]);

然而,现在我决定不再使用jQuery,但是我收到了“选择器未实现”的错误信息。

有没有办法可以解决这个问题,而不必使用jQuery选择器呢?

0
0 Comments

Selectors not implemented when bootstrapping AngularJS without jQuery这个问题的出现的原因是:如果在不加载jQuery的情况下引导AngularJS,则无法使用选择器。AngularJS会回退到所谓的jqLite,这是一组最小的jQuery API子集,用于AngularJS的正常运行。根据官方文档(http://docs.angularjs.org/api/angular.element),在jqLite中只实现了标签名选择器。

解决这个问题的方法是修改代码,使用标签名选择器来进行手动引导。代码如下:

angular.element(document).ready(function() {
  angular.bootstrap(angular.element(document).find('body'), ['stApp']);
});

在这个例子中,我们只使用了标签名选择器,所以find按预期工作,即使没有包含jQuery也可以正常工作。示例链接:http://plnkr.co/edit/xsE02zWxK993FTXtWUbp?p=preview

参考这个类似问题的回答:stackoverflow.com/questions/16537783/…,它似乎建议我必须进行手动引导。其中提到:“它们大致相同,只有一些差异:angular.bootstrap(document, ['TodoApp']);如果您在页面末尾加载脚本(而不是在头部),这将起作用。否则,在引导应用程序时DOM将尚未加载(没有任何模板可编译,指令也不会产生任何效果)。”

0