过滤器在angularJS中不起作用

时间:2013-05-05 11:29:44

标签: javascript angularjs

我正在使用angularJS进行扩展,我遇到过滤器问题。

我在弹出页面有一个按钮,单击时,按钮的祖先节点被阻止,有关其祖先的信息将存储在localStoarge中,所以当再次从服务器获取数据时,我会使用过滤器来过滤先前的信息

这是我的代码:

过滤器中的

app.filter('hideDeadline', function()
{
  return function(deadline){
    if(0 > JSON.parse(localStorage['rmed_deadlines']).indexOf(deadline)){
      return deadline;
    }
  }
}) 
popup.html中的

<li class="deadline" ng-repeat="deadline in deadlines | filter:hideDeadline | orderBy:'time' " ng-hide="hideDeadline">
  <div class="btn-group">
     <button class="btn" ng-click="removeDeadline(deadline)">complete</button>
     <button class="btn" ng-click="removeDeadline(deadline)">ignore</button>
  </div>
  <hr/>  
</li>

和我的controller.js中的内容:

$scope.removeDeadline = function(deadline){
  var old_value = JSON.parse(localStorage.getItem('rmed_deadlines'));
  old_value.push(deadline);
  localStorage.setItem('rmed_deadlines', JSON.stringify(old_value));
  this.hideDeadline = true;
}

但它不起作用。单击时,节点可以被阻止,信息将存储在localStorage中,但是当重新打开扩展时,完成的项目仍然存在,是否意味着过滤器有问题?

1 个答案:

答案 0 :(得分:0)

你试过了吗?

<li class="deadline" ng-repeat="deadline in deadlines | hideDeadline | orderBy:'time' " ng-hide="hideDeadline">

filter实际上是一个内置过滤器,它采用一个列表并将其修剪下来。您可以传递一些东西,但在您的情况下,您希望返回一个函数,将所有项目的true返回到&#34;显示&#34;。

<li class="deadline" ng-repeat="deadline in deadlines | deadlineFunc | orderBy:'time' " ng-hide="hideDeadline">

$scope.deadlineFunc = function(deadline){  
    //return true to show item
    if(0 > JSON.parse(localStorage['rmed_deadlines']).indexOf(deadline)){
      return deadline;
    }
 }