у меня есть следующий фильтр:Угловое обслуживание фильтра с обещанием
app.filter("findDivision", function(divisionService) {
var isWaiting = false;
var returnValue = null;
function myFilter(input) {
var translationValue = "Loading...";
if(returnValue)
{
translationValue = returnValue;
} else {
if(isWaiting === false) {
isWaiting = true;
divisionService.getDivisionById(input).then(function(data) {
console.log("GetTranslation done");
returnValue = data[0].name;
isWaiting = false;
});
}
}
return translationValue;
}
return myFilter;
});
Если функция я заехать в divisionService
выглядит следующим образом:
getDivisionById: function (id) {
var d = $q.defer();
$http({
url: api.getUrl2('division'),
method: "GET",
params: {filters: {id: {EQUAL: id}}}
}).success(function (data, status, headers, config) {
d.resolve(data);
}).error(function (data, status, headers, config) {
api.handleError(data);
console.log(data);
d.reject(data);
});
return d.promise
}
К сожалению, выход из этого выглядит следующим образом:
Может ли кто-нибудь сказать мне, почему это happe нин? и как я могу получить правильное значение?
Фильтры должны быть синхронными, вы не можете использовать асинхронную службу. – dfsq
Вы можете заставить его работать, хотя в этом случае вам нужен фильтр с состоянием: https://code.angularjs.org/1.3.7/docs/guide/filter. В вашем случае просто добавьте одну строку перед возвратом 'myFilter. $ Stateful = правда, '. – dfsq