相关疑难解决方法(0)

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

我有一个以下面的方式定义的AngularJS服务

angular.module('myService').service('myService', function() {
  this.publicFunction(param) {
    ...
  };

  this.anotherPublicFunction(param) {
    // how to call publicFunction(param)?
    ...
  };
});    
Run Code Online (Sandbox Code Playgroud)

我想从服务外部(工作正常myService.publicFunction(xxx))和同一服务中的另一个函数调用第一个函数,即anotherPublicFunction.既不是一个this.publicFunction(param)myService.publicFunction(param)将不会从第二个函数中工作,我可以理解.


编辑:
实际上整个问题是由你无法单独复制的东西引起的.我将第二个函数作为回调参数传递给另一个控制器中的另一个函数,当它被调用时,引用this不起作用.

例如

anotherService.someCall('a', 123, myService.anotherPublicFunction);
Run Code Online (Sandbox Code Playgroud)

内部失败,anotherPublicFunction因为this无法解决.

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

(我仍然会留下这个问题以防万一.)


我知道我可以通过使用对服务的引用或类似的第一个函数来解决问题

var ms = this;
this.anotherPublicFunction(param) {
  ms.publicFunction(param);
  ...
};
Run Code Online (Sandbox Code Playgroud)

或这个

var pf = this.publicFunction;
this.anotherPublicFunction(param) {
  pf(param);
  ...
};
Run Code Online (Sandbox Code Playgroud)

但两者看起来都很脏.

在这种情况下,有没有一种好方法可以从第二个函数调用第一个函数?或者我首先要做一些完全错误的事情来获得这样的服务?

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

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

编辑:

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

var actualWork = function(param) { …
Run Code Online (Sandbox Code Playgroud)

angularjs

75
推荐指数
4
解决办法
7万
查看次数

标签 统计

angularjs ×1