Вызов функции в службе AngularJS из той же службы?
У меня есть служба 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);
...
};
но оба кажутся грязными взломами.
Есть ли хороший способ вызвать первую функцию из второй в этом случае? Или я делаю что-то совершенно не так, во-первых, чтобы иметь такой сервис?
Я нашел эти вопросы с хорошими ответами:
Angularjs разделяет функции внутри сервисаAngularJs вызывают внутреннюю сервисную функцию из себяно они отличаются от моей проблемы, поскольку одна из них имеет отдельную внутреннюю функцию, которая должна была быть вызвана, а другая использует фабрику вместо службы.
РЕДАКТИРОВАТЬ:
После публикации этого я сразу понял, что я мог также сделать это:
var actualWork = function(param) {
...
}
this.publicFunction(param) {
actualWork(param);
};
this.anotherPublicFunction(param) {
actualWork(param);
...
};
что пока не так плохо, как другие варианты ... Есть ли лучшие подходы?