不显示角度自定义过滤器

时间:2016-04-12 18:27:40

标签: angularjs

我在最后一天一直在处理这个问题,试图弄清楚我做错了什么。我试图将一个值传递给过滤器,并从一个从工厂返回的哈希中返回一个字符串。我可以让它在类似的函数中工作,不会调用工厂,但每当我从工厂返回时我都无法显示字符串,即使控制台中显示了相应的字符串。我在这里错过了一些非常简单的东西吗?

控制器在这里:

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

1 个答案:

答案 0 :(得分:5)

您无法在过滤器中使用承诺,因为过滤器将以任何方式执行,当您的承诺结束时,该功能已将结果返回给UI。