2016-04-12 2 views
2

Я занимаюсь этим в течение последнего дня, пытаясь понять, что я делаю неправильно. Я пытаюсь передать значение в фильтр и вернуть строку из хеша, которая была построена из возврата с фабрики. Я могу заставить его работать в аналогичной функции, которая не вызывает фабрику, но всякий раз, когда я возвращаюсь с фабрики, я не могу отобразить эту строку, даже если соответствующая строка отображается в консоли. Я пропустил что-то действительно легкое здесь?Угловой пользовательский фильтр не отображается

контроллер здесь:

var app = angular.module('app', []); 
app.controller('ctrl', ['$scope', function($scope) { 
    $scope.stuff = 1; 
}]) 

Фабрика здесь:

app.factory('factory', ['$q', function($q) { 
    var list = [ 
    {set1: 1,set2: 'name1'}, 
    {set1: 2,set2: 'name2'} 
    ]; 
    var list2 = [ 
    {set1: 1,set2: 'name6'}, 
    {set1: 2,set2: 'name7'} 
    ] 
    var service = { 
    getList: getList 
    } 
    return service; 

    function getList(id) { 
    var deferred = $q.defer(); 
    if (id === 1) { 
     deferred.resolve(list); 
    } else if (id === 2) { 
     deferred.resolve(list2); 
    } 
    return deferred.promise; 
    } 
}]) 

фильтр здесь:

app.filter('customFilter', ['factory', function(factory) { 
    var factoryHash = {}; 
    return function(input, id) { 
    factory.getList(id) 
     .then(function(res) { 
     angular.forEach(res, function(value) { 
      this[value.set1] = value.set2; 
     }, factoryHash); 
     console.log('factoryHash', factoryHash[input]) 
     return factoryHash[input]; 
     }) 
    } 
}]) 

plnkr здесь.

https://plnkr.co/edit/c4hYrRrdbBF9M2o5tVV5

ответ

5

Вы не можете использовать обещание внутри фильтра, так как фильтр будет выполняться любым способом, и когда ваше обещание заканчивается функция уже возвращает результат в пользовательский интерфейс.

+0

Спасибо Далорзо! – Wes

Смежные вопросы