【问题标题】:Angular custom filter works but the code is throwing errors角度自定义过滤器有效,但代码抛出错误
【发布时间】:2017-05-02 11:27:07
【问题描述】:

我有以下过滤器,它查看两次,从另一个中减去一个,如果数字大于 0,则过滤器通过

这里是代码

delayControllers.filter('customDelayFilter', function() {
  return function(data) {
    return data.filter(value => (new Date(value.etd) - new Date(value.std)) > 0);
  };
});

在谷歌控制台中抛出错误

无法读取未定义的属性“过滤器”

在 phpstorm 中,=> 和 > 符号(预期表达式)一样显示错误

现在问题来了,这段代码在运行时完全符合预期。我用它来称呼它

 <tr ng-repeat="service in listOfServices | customDelayFilter">

我只在除 IOS 之外的任何设备上的行 etd - std 大于 0 时得到结果。当我删除此过滤器时,页面在 IOS 上运行良好,所以看起来 IOS 上的 Safari 对错误很挑剔

有没有更简洁的方法来重写我几周前提出的一个线程中提供的上述过滤器(现已关闭)

【问题讨论】:

    标签: javascript angularjs filter


    【解决方案1】:

    您的过滤器需要一个已定义的数组。我怀疑ng-repeat 第一次运行时listOfServices 可能还没有初始化,这取决于你如何初始化它。

    要么确保 listOfServices 已初始化,要么在过滤器中添加检查,即

    delayControllers.filter('customDelayFilter', function() {
       return function(data) {
          if (data) {
             return data.filter(value => (new Date(value.etd) - new Date(value.std)) > 0);
          }
          else {
             return [];
          }
      };
    });
    

    【讨论】:

    • 我应该知道我正在异步提取数据,并且过滤器正在对不存在的数据进行操作。我确实尝试了 ng-init="listOfServices=[]" 但没有用,所以我认为这是别的东西。您的解决方案完美运行。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2019-02-16
    • 2015-04-17
    • 2018-03-15
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多