AngularJS: Asynchronicznie inicjalizuj filtr
Mam problem z próbą zainicjowania filtru z danymi asynchronicznymi.
Filtr jest bardzo prosty, musi przetłumaczyć ścieżki na nazwę, ale aby to zrobić, potrzebuje tablicy korespondencji, którą muszę pobrać z serwera.
Mogę robić rzeczy w definicji filtra, przed zwróceniem funkcji, ale aspekt asynchroniczny tego uniemożliwia
angular.module('angularApp').
filter('pathToName', function(Service){
// Do some things here
return function(input){
return input+'!'
}
}
Korzystanie z obietnicy może być opłacalne, ale nie mam jasnego zrozumienia, w jaki sposób filtry obciążeń kątowych. Tosłupek wyjaśnia, jak osiągnąć taką magię za pomocą usług, ale czy można zrobić to samo dla filtrów?
A jeśli ktoś ma lepszy pomysł na to, jak przetłumaczyć te ścieżki, wszyscy mam uszy.
EDYTOWAĆ:
Próbowałem z obietnicą, ale coś jest nie tak i nie rozumiem, co:
angular.module('angularApp').filter('pathToName', function($q, Service){
var deferred = $q.defer();
var promise = deferred.promise;
Service.getCorresp().then(function(success){
deferred.resolve(success.data);
}, function(error){
deferred.reject();
});
return function(input){
return promise.then(
function(corresp){
if(corresp.hasOwnProperty(input))
return corresp[input];
else
return input;
}
)
};
});
Nie znam się na obietnicach, czy jest to właściwy sposób na ich wykorzystanie?