ng-click上的角度工厂原型解离

时间:2015-12-02 15:51:30

标签: javascript angularjs

我有一个工厂,有一系列需要能够相互调用的原型。问题是在使用ng-click时,“this”的引用被应用于html模板而不是原始工厂类。

以下是一个例子:

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

    return FactoryA;
}

控制器将工厂设置为$ scope变量“myFactory”。

将从html模板中调用ng-click

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

问题是myFactory.useHello上下文中的“this”被html模板引用取代,并丢失了它与FactoryA及其他原型的链接。

如何保持与工厂类及其他原型相关联的ng-click功能?

1 个答案:

答案 0 :(得分:2)

您可以将工厂方法绑定到自身以避免此问题,但这是一个糟糕的解决方法。

正如@ ste2425所说,你应该在你的控制器中声明一个处理程序,它将执行对服务方法的调用并在你的模板中使用这个处理程序:

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

在你的控制器中:

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

此外,对工厂/服务使用原型声明,这是单一的设计,是没有用的。