我通过以下方式定义了一个 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);
...
};
到目前为止,这似乎没有其他选择那么糟糕......有更好的方法吗?