2015-12-02 87 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