我有一个AngularJS服务以下面的方式定义
angular.module('myService').service('myService',function() { this.publicFunction(param) { ... }; this.anotherPublicFunction(param) { // how to call publicFunction(param)? ... }; });
并且我想调用第一个函数从服务外(通过myService.publicFunction(xxx))和从同一服务中的另一个函数,即anotherPublicFunction。这个.publicFunction(param)或myService.publicFunction(param)都不会在第二个函数内工作,我可以理解。
编辑:
实际上整个问题是由你不能用我的例子独自复制的东西造成的。我将第二个函数作为回调参数传递给另一个控制器中的另一个函数,当它被调用时,对此的引用不起作用。
例如。
anotherService.someCall('a',123,myService.anotherPublicFunction);
失败在anotherPublicFunction内,因为这无法解决。
我写了一个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); ... };
但两个看起来像脏的黑客。
在这种情况下有没有一个好的方法来调用第二个函数的第一个函数?或者我在做一些完全错误的第一个地方有这样的服务?
我发现这些问题有很好的答案:
> Angularjs share functions inside service
> AngularJs call an internal service function from self
但它们不同于我的问题,因为其中一个有一个单独的内部函数被调用,另一个使用工厂而不是服务。
编辑:
发布后,我立即意识到,我也可以这样做:
var actualWork = function(param) { ... } this.publicFunction(param) { actualWork(param); }; this.anotherPublicFunction(param) { actualWork(param); ... };
这似乎不像其他选项迄今为止…有更好的方法吗?
我认为最好的方法是这样去:
var myFunctions = { myFunc1: function(param) { },myFunc2: function(param) { return foo + myFunctions.myFunc1(param)// do some stuff with the first function } } return myFunctions;
因为我认为如果你使用这个,它可能会与使用服务的范围冲突。