微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从相同的服务调用AngularJS服务中的函数?

我有一个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;

因为我认为如果你使用这个,它可能会与使用服务的范围冲突。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐