2015-04-03 62 views
1

我正在AngularJS中編寫應用程序。我需要公開一個將被外部庫調用的函數。如何在AngularJS中公開公共函數

我需要我的第三方庫調用

executeFunction(param) 

,並相應地有我的角度應用程序響應。

我的第一個想法是創建一個指令,我可以應用到一個頁面,告訴頁面監聽這個事件(函數)被調用,但我似乎無法包裝我的頭如何做到這一點。

+1

創建具有相應功能的工廠或服務 – ganders 2015-04-03 19:36:33

+0

您打算如何使該功能在全球範圍內可用? – JackNova 2015-04-03 20:18:10

回答

0

你可以讓一個factoryservice或者更強大的解決方案將是使AB完整模塊

angular.modue("myLib") 
.factory("myLibFactory",function(){ 
return{ 
executeFunction :function(param){} 
} 
}) 
+0

然後我如何在頁面上使用此功能? – stephen776 2015-04-07 15:47:00

1

如果「外部庫」你的意思是純JavaScript/jQuery的,也有一些答案的這個問題。他們都提出了同樣的解決方案,即控制器通過DOM元素的ID曝光,請訪問以下鏈接:

Call Angular Function with Jquery

AngularJS. How to call controller function from outside of controller component

創建一個工廠或服務將不會幫助你有沒有方式注入/暴露一個角度的服務jQuery的功能。

而不是上述解決方案,我會建議嘗試編寫一個事件處理程序。您可以創建一個帶有註冊jQuery自定義事件偵聽器的鏈接函數的angularjs指令。該指令將包含一個嵌套的控制器來處理所需的邏輯。那麼你的jQuery/JavaScript代碼可以簡單地觸發事件

jQuery的客戶活動(以及所需要的任何數據傳遞):

https://learn.jquery.com/events/introduction-to-custom-events/

我認爲然而這一切是不好的做法。我建議你重新考慮你正在努力完成的設計。

+0

在我的場景中,我有一個將JS注入頁面的WPF應用程序。 WPF應用程序期望在頁面上有一個函數作爲'wpfInput(value)'調用,所以我不認爲有什麼方法可以避開不好的練習方面。 – stephen776 2015-04-07 15:25:43

+0

我需要在我的angularJS應用程序的每個頁面上都有我的函數(它反過來由我的WPF應用程序加載) – stephen776 2015-04-07 17:35:09