Wywoływanie funkcji w usłudze AngularJS z tej samej usługi?
Mam usługę AngularJS zdefiniowaną w następujący sposób
angular.module('myService').service('myService', function() {
this.publicFunction(param) {
...
};
this.anotherPublicFunction(param) {
// how to call publicFunction(param)?
...
};
});
i chciałbym wywołać pierwszą funkcję zarówno spoza usługi (która działa dobrze przezmyService.publicFunction(xxx)
) i z innej funkcji w tej samej usłudze, tj.anotherPublicFunction
. Ani jednego zthis.publicFunction(param)
lubmyService.publicFunction(param)
nie będzie działać z drugiej funkcji i mogę to zrozumieć.
EDYTOWAĆ:
W rzeczywistości cały problem został spowodowany przez coś, czego nie można odtworzyć za pomocą mojego przykładu. Przekazałem drugą funkcję jako parametr wywołania zwrotnego innej funkcji w oddzielnym kontrolerze, a gdy zostanie wywołana, odwołanie dothis
nie działa.
Na przykład.
anotherService.someCall('a', 123, myService.anotherPublicFunction);
zawodzi w środkuanotherPublicFunction
bothis
nie można rozwiązać.
Napisałem Plunkera, aby pokazać problem: http://plnkr.co/edit/rrRs9xnZTNInDVdapiqF?p=info
(Nadal zostanę tutaj w przypadku, gdy pomoże to komuś innemu.)
Wiem, że mogłem obejść ten problem, używając odwołania do usługi lub pierwszej takiej funkcji
var ms = this;
this.anotherPublicFunction(param) {
ms.publicFunction(param);
...
};
albo to
var pf = this.publicFunction;
this.anotherPublicFunction(param) {
pf(param);
...
};
ale oba wydają się brudne.
Czy w tym przypadku istnieje dobry sposób na wywołanie pierwszej funkcji z drugiej? A może robię coś zupełnie złego, żeby mieć taką usługę?
Znalazłem te pytania z dobrymi odpowiedziami:
Angularjs udostępniają funkcje wewnątrz usługiAngularJs wywołują wewnętrzną funkcję usługi od siebieróżnią się jednak od mojego problemu, ponieważ jeden z nich ma osobną, wewnętrzną funkcję, która miała zostać wywołana, a druga używała fabryki zamiast usługi.
EDYTOWAĆ:
Po opublikowaniu tego natychmiast zdałem sobie sprawę, że mogę to zrobić:
var actualWork = function(param) {
...
}
this.publicFunction(param) {
actualWork(param);
};
this.anotherPublicFunction(param) {
actualWork(param);
...
};
co nie wydaje się tak złe, jak inne opcje do tej pory ... Czy są lepsze podejścia?