AngularJS: Асинхронно инициализировать фильтр
У меня возникли проблемы при попытке инициализировать фильтр с асинхронными данными.
Фильтр очень прост, ему нужно преобразовать пути в имя, но для этого ему нужен массив соответствий, который мне нужно получить с сервера.
Я мог бы сделать что-то в определении фильтра, прежде чем возвращать функцию, но асинхронный аспект предотвращает это
angular.module('angularApp').
filter('pathToName', function(Service){
// Do some things here
return function(input){
return input+'!'
}
}
Использование обещания может быть целесообразным, но у меня нет четкого понимания того, как угловые нагрузки фильтруют. ЭтотПочта объясняет, как добиться такого волшебства с помощью сервисов, но возможно ли сделать то же самое для фильтров?
И если у кого-то есть лучшее представление о том, как переводить эти пути, я весь в ушах.
РЕДАКТИРОВАТЬ:
Я попытался с обещанием приблизиться, но что-то не так, и я не вижу, что:
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;
}
)
};
});
Я не очень знаком с обещаниями, это правильный способ их использовать?