2012-09-19 61 views
16

我使用的是RequireJS和Angular,但他們並沒有在我的設置中一起工作。當jQuery版本爲1.7.2時,情況正常。然而,我想使用jQuery 1.8.1和jQuery UI和角度應用程序甚至無法用此來初始化我的主模塊。jQuery和AngularJS不能一起工作

這裏的問題是:

區分大小寫變量: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控制檯:

Console Output

如果我恢復到1.7.2角的作品。或者,如果我編輯jQuery文件來定義window.jquery而不是window.jQuery(請注意大小寫),它再次起作用。但這意味着jQuery UI不會。

+1

你試過包括jQuery,然後說,「window.jquery = jQuery;」?然後,jquery和jQuery都將被定義(別名爲相同的東西),並且兩個包都應該很開心。 –

+0

是的,我試過了。對於這兩個版本,AngularJS都抱怨沒有找到模塊名稱'manager'。我認爲我的問題更多的是與RequireJS相比,而不是AngularJS。我的項目使用了RequireJS,所以我想知道是否有人試圖在RequireJS項目中包含jQuery UI和Angular。 –

回答

3

我通過從jQuery源代碼中刪除了使$和jQuery成爲全局變量的行來修復了此解決方案。這條線看起來像window.jQuery = window.$ = jQuery

如果您也在使用帶有RequireJS的AngularJS並且面臨類似問題,請刪除這些行。另外,您將不得不在項目中使用jqueryui-amd。從Github頁面下載實用程序,它會將jQuery UI腳本轉換爲AMD模塊。

使用名爲'directives'的AngularJS特性來擴展HTML元素我能夠以可重複使用和理智的方式使用jQuery UI組件。

我不得不說我在項目上工作時討厭和愛上了AngularJS,有時甚至讓每個人都知道我討厭AngularJS。但是,在上個月實施並完成了兩個項目之後,我對於何時使用它以及何時不使用它有了相當好的想法。

這裏是一個的jsfiddle我創建演示如何使用jQuery用戶界面與AngularJS:

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

+3

我不認爲這應該是被接受的答案。你不需要編輯jQuery源代碼。這不是一個好習慣。首先,當你(或者你之後的某個人)最終需要升級jquery時,會產生不必要的維護開銷。 –

16

使用jQuery的noConflict方法是一種更優雅的,面向未來的解決這個問題。

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

UPDATE(例如,從鏈接):經過我的兩個幾天再試

<script> 
$.noConflict(); 
jQuery(document).ready(function($) { 
    // Code that uses jQuery's $ can follow here. 
}); 
// Code that uses other library's $ can follow here. 
</script> 
+4

如果您將文檔中的代碼示例直接放入答案中,而不是用戶必須訪問鏈接以查找所需信息,那麼這將是更好的答案:) – Jimbo

1

容易解決這個..

當嘗試

附上將特定的Slider Jquery文件直接發送到view.html。從index.html文件中刪除jquery

相關問題