2015-12-02 82 views
0

我有一個工廠,有一系列需要能夠互相調用的原型。問題是,在使用ng-click時,引用「this」正被應用於html模板而不是原始工廠類。NG-Click角度工廠原型解離

下面是一個例子:

angular.factory('myFactory', function(){ 
    function FactoryA(){} 
    FactoryA.prototype.hello = function(){ console.log('Hello') }; 
    FactoryA.prototype.useHello = function(){ this.hello() }; 

    return FactoryA; 
} 

控制器將設定出廠到$範圍變量 「myFactory」。

ng-click將被稱爲像這樣從HTML模板:

<button type="button" ng-click="myFactory.useHello()">Hello</button> 

的問題是,「這個」,在myFactory.useHello的情況下是由HTML模板引用取代,失去了它的鏈接FactoryA和其他原型。

如何保持與工廠類和其他原型相關的ng-click函數?

+0

公開您的示波器的服務/工廠通常被認爲是不好的做法。正是因爲這個原因,通過數據綁定所做的任何更改不僅會傳播回控制器中的服務,還會傳播到您的應用程序中的所有使用(即服務不是工廠作爲其單個實例)。您應該在控制器中創建一個與服務交談的點擊處理程序。您也可以綁定工廠功能的上下文。 – ste2425

+0

您可以將代碼添加到您在示波器中創建myFactory的位置嗎?我認爲你錯過了「新」。 – Victor

+0

只是爲了解釋一下,當我使用angular來建立動態網站和應用程序的用途時,我理解數據綁定工廠到控制器的問題。爲了我的目的,我需要工廠在供應方面是完全動態的。我使用工廠作爲動態類來嚮應用程序提供某些「依賴性」,這些「依賴性」是基於將Java系統加載到應用程序的服務器端所需的。在應用程序中的不同服務器端進程之間切換將使用運行它所需的依賴性來更新應用程序。 – BrentShanahan

回答

2

您可以將工廠方法綁定到自身以避免該問題,但這是一個糟糕的解決方法。

正如@ ste2425說,你應該聲明在控制器的處理器將執行調用服務方法和模板使用此處理:

<button type="button" ng-click="useHello()">Hello</button> 

而在你的控制器:

$scope.useHello = function() { 
    myFactory.useHello();  
} 

此外,使用原型聲明的工廠/服務,這是單身設計,是有點沒用。

+0

我將此標記爲正確。正如你和ste2425所指出的那樣,我確實看到了我在傳統意義上的問題,但我寫的應用程序遠非傳統。原來,我只是在我的代碼中聲明相當於useHello的錯誤,因爲它沒有正確地與工廠鏈接。我猜這個問題太快了。雖然謝謝! – BrentShanahan