Javascript jQuery和AngularJS不在一起工作

Javascript jQuery和AngularJS不在一起工作,javascript,jquery,jquery-ui,requirejs,angularjs,Javascript,Jquery,Jquery Ui,Requirejs,Angularjs,我使用的是RequireJS和Angular,但在我的设置中,它们不能一起工作。当jQuery版本为1.7.2时,一切正常。然而,我想使用jQuery 1.8.1和jQuery UI,angular app甚至无法用它初始化我的主模块 问题是: 区分大小写的变量:jQuery和jQuery。在jQuery1.8.1源代码中,最后他们定义了window.jquery。其中,与早期版本1.7.2一样,定义了window.jquery 因为我想在我的应用程序中使用jqueryui,所以包含了jQuer

我使用的是RequireJS和Angular,但在我的设置中,它们不能一起工作。当jQuery版本为1.7.2时,一切正常。然而,我想使用jQuery 1.8.1和jQuery UI,angular app甚至无法用它初始化我的主模块

问题是:

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

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

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

我用jamesburkegithub项目的最新版本更新了requirejqueryjs,并用jquery1.8.1进行了更新

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

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


如果我恢复到1.7.2角度工程。或者,如果我编辑jQuery文件来定义window.jQuery而不是window.jQuery(注意这种情况),它会再次工作。但这意味着jQuery UI不会。我通过从jQuery源代码中删除使$和jQuery成为全局变量的行,修复了这个解决方案。这行看起来像
window.jQuery=window.$=jQuery

如果您还将AngularJS与RequireJS一起使用,并且面临类似的问题,请删除这些行

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

使用名为“指令”的AngularJS特性来扩展HTML元素,我能够以可重用和理智的方式使用jQueryUI组件

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

下面是我创建的一个JSFIDLE,用于演示如何将jQuery UI与AngularJS结合使用:


使用jQuery的noConflict方法是解决这个问题的一个更优雅、更符合未来的解决方案

查看有关的大量文档

更新(链接中的示例):


$.noConflict();
jQuery(文档).ready(函数($){
//使用jQuery的$的代码如下所示。
});
//使用其他库的$的代码可以在这里找到。

经过两天的尝试,我很容易就解决了这个问题

试一试


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

您是否尝试过包含jquery,然后说“window.jquery=jquery;”?然后,jquery和jquery都将被定义(化名为相同的东西),两个包都应该很满意。对于这两个版本,AngularJS抱怨没有找到模块名“manager”。我认为我的问题更多的是关于RequireJS而不是AngularJS。我的项目使用了RequireJS,所以我想知道是否有人试图在RequireJS项目中包含jQuery UI和Angular。如果您将文档中的代码示例直接放在答案中,这将是一个更好的答案,我不认为这应该是一个被接受的答案,而不是用户必须去访问链接才能找到他们需要的信息:)。您不需要编辑jQuery源代码。这不是一个好的练习。首先,当您(或您之后的人)最终需要升级jquery时,它会产生不必要的维护开销。
<script>
$.noConflict();
jQuery( document ).ready(function( $ ) {
  // Code that uses jQuery's $ can follow here.
});
// Code that uses other library's $ can follow here.
</script>