我有以下方式定义的AngularJS服务
angular.module('myService').service('myService', function() {
this.publicFunction(param) {
...
};
this.anotherPublicFunction(param) {
// how to call publicFunction(param)?
...
};
});
我想从服务外部(通过可以正常使用myService.publicFunction(xxx)
)和同一服务(即)中的另一个函数调用第一个函数anotherPublicFunction
。无论是一个this.publicFunction(param)
或myService.publicFunction(param)
将不会从第二个函数中工作,我可以理解。
编辑:
实际上,整个问题是由您仅凭我的示例无法重现的某些问题引起的。我将第二个函数作为回调参数传递给了单独控制器中的另一个函数,当调用该函数时,对它的引用this
不起作用。
例如
anotherService.someCall('a', 123, myService.anotherPublicFunction);
内部失败,anotherPublicFunction
因为this
无法解决。
我写了一个Plunker来显示问题: http ://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info
(我仍将问题留在这里,以防它对其他人有所帮助。)
我知道我可以通过使用对服务或第一个函数的引用来解决此问题
var ms = this;
this.anotherPublicFunction(param) {
ms.publicFunction(param);
...
};
或这个
var pf = this.publicFunction;
this.anotherPublicFunction(param) {
pf(param);
...
};
但两者似乎都是肮脏的骇客。
在这种情况下,有没有一种好的方法可以从第二个函数中调用第一个函数?还是我首先要做的是完全错误的事情以获得这样的服务?
我发现这些问题的答案很好:
但是它们与我的问题不同,因为它们之一具有要调用的单独的内部函数,而另一个则使用工厂而不是服务。
编辑:
发布后,我立即意识到我也可以这样做:
var actualWork = function(param) {
...
}
this.publicFunction(param) {
actualWork(param);
};
this.anotherPublicFunction(param) {
actualWork(param);
...
};
到目前为止,这似乎还不如其他选择那么糟糕。是否有更好的方法?
var ms = this;
(通常写为var self = this;
)“肮脏的骇客”?