我有一个工厂,有一系列需要能够相互调用的原型。问题是在使用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功能?
答案 0 :(得分:2)
您可以将工厂方法绑定到自身以避免此问题,但这是一个糟糕的解决方法。
正如@ ste2425所说,你应该在你的控制器中声明一个处理程序,它将执行对服务方法的调用并在你的模板中使用这个处理程序:
<button type="button" ng-click="useHello()">Hello</button>
在你的控制器中:
$scope.useHello = function() {
myFactory.useHello();
}
此外,对工厂/服务使用原型声明,这是单一的设计,是没有用的。