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

前端之家收集整理的这篇文章主要介绍了从相同的服务调用AngularJS服务中的函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个AngularJS服务以下面的方式定义
  1. angular.module('myService').service('myService',function() {
  2. this.publicFunction(param) {
  3. ...
  4. };
  5.  
  6. this.anotherPublicFunction(param) {
  7. // how to call publicFunction(param)?
  8. ...
  9. };
  10. });

并且我想调用第一个函数从服务外(通过myService.publicFunction(xxx))和从同一服务中的另一个函数,即anotherPublicFunction。这个.publicFunction(param)或myService.publicFunction(param)都不会在第二个函数内工作,我可以理解。

编辑:
实际上整个问题是由你不能用我的例子独自复制的东西造成的。我将第二个函数作为回调参数传递给另一个控制器中的另一个函数,当它被调用时,对此的引用不起作用。

例如。

  1. anotherService.someCall('a',123,myService.anotherPublicFunction);

失败在anotherPublicFunction内,因为这无法解决

我写了一个Plunker来显示问题:
http://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info

(我仍然会在这里留下问题,以防它会帮助别人。)

我知道我可以通过使用引用服务或第一个函数解决这个问题

  1. var ms = this;
  2. this.anotherPublicFunction(param) {
  3. ms.publicFunction(param);
  4. ...
  5. };

或这个

  1. var pf = this.publicFunction;
  2. this.anotherPublicFunction(param) {
  3. pf(param);
  4. ...
  5. };

但两个看起来像脏的黑客。

在这种情况下有没有一个好的方法调用第二个函数的第一个函数?或者我在做一些完全错误的第一个地方有这样的服务?

我发现这些问题有很好的答案:

> Angularjs share functions inside service
> AngularJs call an internal service function from self

但它们不同于我的问题,因为其中一个有一个单独的内部函数调用,另一个使用工厂而不是服务。

编辑:

发布后,我立即意识到,我也可以这样做:

  1. var actualWork = function(param) {
  2. ...
  3. }
  4.  
  5. this.publicFunction(param) {
  6. actualWork(param);
  7. };
  8.  
  9. this.anotherPublicFunction(param) {
  10. actualWork(param);
  11. ...
  12. };

这似乎不像其他选项迄今为止…有更好的方法吗?

我认为最好的方法是这样去:
  1. var myFunctions =
  2. {
  3.  
  4. myFunc1: function(param) {
  5.  
  6. },myFunc2: function(param) {
  7. return foo + myFunctions.myFunc1(param)// do some stuff with the first function
  8. }
  9.  
  10. }
  11. return myFunctions;

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

猜你在找的Angularjs相关文章