0

我正在使用 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中,但是重新打开扩展时,完成的项目仍然存在,是不是过滤器有问题?

4

1 回答 1

0

你有没有尝试过:

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

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

<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;
    }
 }
于 2014-04-08T14:25:55.030 回答