16

我正在使用 RequireJS 和 Angular,但它们在我的设置中没有一起工作。当 jQuery 版本为 1.7.2 时,一切正常。但是我想使用 jQuery 1.8.1 和 jQuery UI 和 Angular 应用程序甚至无法用这个初始化我的主模块。

这是问题所在:

区分大小写的变量:jQuery 和 jquery。在 jquery 1.8.1 源代码中,最后他们定义了 window.jQuery。在早期版本 1.7.2 中定义了 window.jquery。

因为我想在我的应用程序中使用 jQuery UI,所以包含文件 jquery-ui-1.8.23.custom.min.js。包含它后,我得到了“jQuery”未定义的错误。

所以,我决定升级我的 jQuery 版本并下载了 1.8.1 版本。在 jQuery 源代码的末尾,我可以看到这个版本定义了 window.jQuery(jQuery UI 需要正确大小写)。

我用 James Burke github 项目的最新版本更新了我的 require-jquery JS,并用 jquery 1.8.1 更新了它。

但是包括更新的 jQuery/RequireJS 项目,angularjs 已经停止工作。

我在 Chrome 控制台中收到此错误:

控制台输出

如果我恢复到 1.7.2 角度作品。或者,如果我编辑 jQuery 文件来定义 window.jquery 而不是 window.jQuery(注意大小写),它会再次起作用。但这意味着 jQuery UI 不会。

4

3 回答 3

17

使用 jQuery 的 noConflict 方法是解决这个问题的一种更优雅和面向未来的解决方案。

在http://api.jquery.com/jQuery.noConflict/上查看大量文档

更新(来自链接的示例):

<script>
$.noConflict();
jQuery( document ).ready(function( $ ) {
  // Code that uses jQuery's $ can follow here.
});
// Code that uses other library's $ can follow here.
</script>
于 2013-03-22T07:35:07.657 回答
3

我通过从 jQuery 源代码中删除使 $ 和 jQuery 成为全局变量的行来修复此解决方案。这条线看起来像window.jQuery = window.$ = jQuery.

如果您还使用 AngularJS 和 RequireJS 并遇到类似问题,请删除这些行。

此外,您必须在项目中使用jqueryui-amd。从 Github 页面下载该实用程序,它将 jQuery UI 脚本转换为 AMD 模块。

使用称为“指令”的 AngularJS 功能来扩展 HTML 元素,我能够以可重用和理智的方式使用 jQuery UI 组件。

我不得不说,在我的项目上工作时,我既讨厌又喜欢 AngularJS,有时甚至让 Twitter 上的每个人都知道我讨厌 AngularJS。然而,在上个月实施并完成了两个项目之后,我对何时使用它以及何时不使用它有了相当好的想法。

这是我创建的一个 jsFiddle,用于演示将 jQuery UI 与 AngularJS 一起使用:

http://jsfiddle.net/samunplugged/gMyfE/2/

于 2012-09-22T20:33:14.287 回答
1

经过两天的尝试后轻松解决了这个问题..

当尝试

将特定的 Slider Jquery 文件直接包含到 view.html 中。从 index.html 文件中删除 jquery

于 2017-01-31T11:55:51.637 回答