2017-07-27 74 views
0

不同的方式我最近開始,希望學習角4把它撿起來的幾個項目(我還在學習很多基礎的,所以我的問題似乎是顯而易見的)。在過去,我一直在使用jQuery來處理大多數DOM操作,但是現在使用Angular時,有非常明顯的變化,這使得在Angular應用程序中使用jQuery更麻煩一些。混合jQuery和Angular4

我讀了一個多角度的項目中使用jQuery對於很多堆棧溢出的職位,但是他們都建議從組件打字稿文件中寫你的jQuery函數。這是有道理的,因爲Angular應該基於組件。我唯一的問題是關於如何在組件之外創建全局級jQuery函數。

例如,在過去我一直就創建了一個js文件來保存我的jQuery的功能,並讓他們我的HTML文件中引用。一個例子就是圖像的視差函數。如果我想爲不同的視差圖像添加一些不同的樣式,我可以做到這一點,並仍然有我的jQuery做它的工作,但現在說例如我有兩個不同的視差組件使用相同的jQuery代碼,是否有(右)的方式來引用從不同組件內的相同功能通過一個全球性的js文件,持有jQuery代碼?

我的假設是,我可以只創建一個文件「xxxx.js」保存的功能,並將它index.html文件中引用。我只想知道我所描述的東西是否可行,如果是的話,最好的方法是什麼。

回答

0

我將可能使用依賴注入, 的做法是:

  1. 創建它包含所有跨職能的通用功能 一個服務文件。
  2. 使用他們作爲我的目標組件供應商。
  3. 使用扶養注射創建這類服務的對象,並在我的組件使用它們。

至於有辦法「創建JS和包括index.html,然後整個組件使用」, 是有可能。 我已經在我的項目中使用它作爲外部庫中的一個,這是一個js文件。步驟應該是:

  1. 複製在SRC /資產/ JavaScript的JS文件
  2. (加入他們的index.html

    <script src="assets/javascript/yourFile.js"></script> 
    
  3. 聲明你的js函數如圖組件部分組件之前,指令)如下所示:

    declare var yourFunction: any; 
    
  4. 現在您可以在目標組件中使用您的功能。
+0

啊這樣就解決了一半的問題。但現在說一個例子,我有一個函數被觸發在一個特定的事件,如窗口調整大小。我的大多數功能都沒有命名,因爲它們只是觸發了事件的內聯。所以像$(window).on(「resize」,function(){....});你提供的方法是否仍然適用於這樣的事情?由於在窗口大小調整時沒有在組件中聲明特定的函數。在我的視差示例中,它會在窗口滾動中觸發。 –

+0

我對此不是很確定,但可以試試看看它是否有效,不要在組件中聲明任何內容,只需執行第1步和第2步並查看事件是否觸發了您的函數。 雖然我會建議使用命名函數,這使得代碼更具可讀性,可維護性,並符合打字原理 –

+0

雅這就是我嘗試,我的意思是....如果帶有jQuery的js文件被添加到HTML文件Angular正在構建中,我會假設它自己的文件中的jQuery仍然能夠像它只是一個標準的HTML文件一樣運行。 –

0

當您使用框架作爲角度時,它開始操作元素及其事件。 Jquery不像你習慣的那樣工作,因爲如果你只在頁面末尾輸入腳本一次,這些事件將被應用到當前元素,但是在角度作出任何修改之後,事件將不再起作用。

不建議將jquery與角度結合使用,但是,如果要利用尚未在特定角度插件中找到的某些功能,可以創建一個角度組件,以便進行綁定,以便必須通過應用到你想要的元素來進行jquery調用,顯然理想的是你還要處理某些類型事件的解綁。

下面是一個例子:Example