Angular 过滤器和 ng-click 不工作

Angular filter and ng-click not working

我有一个列出一组列表的菜单:

<ul>
  <li ng-repeat="group in getData">
    <a ng-click="groupId = group.id">{{group.id}}</a>
  </li>
</ul>

点击该项目,应该更新 groupId 但显然不是。

我还创建了一个过滤器,它从 groupId:

获取值
Data.query(function(data) {
  $scope.getData = data;
  $scope.currentGroup =  $filter('filter')(data, {id: $scope.groupId});
  $log.debug($scope.groupId);
  $log.debug($scope.currentGroup);
}, function(reason) {
  $log.error(reason)
});

应该过滤以下列表以仅显示具有所选 groupId 的项目:

<tr ng-repeat="list in currentGroup.lists">
  <td>{{list.name}}</td>
</tr>

但是,它也不起作用。我可以在控制台中记录正确的数组,但是 table 没有显示任何数据。

请看看这个Plunker

在您的 Plunker 中,您可以像这样使用它

<table>
    <tr ng-repeat="group in currentGroup">
      <td ng-repeat="list in group.lists">{{list.name}}</td>
    </tr>
</table>

因为currentGroup也是一个数组

您的代码存在多个问题。这里有 2 个:

  1. ng-repeat 创建它自己的子作用域,因此当您执行 ng-click="groupId = group.id" 时,您正在分配子作用域的 groupId,您应该设置父作用域:

    <a ng-click="$parent.groupId = group.id">{{group.id}}</a>
    

    但这看起来不太好;尝试使用 as syntax,或从函数分配它。

  2. $filter returns 一个数组,所以你必须 select 第一个元素才能正确分配你的 currentGroup:

    $scope.currentGroup =  $filter('filter')(data, {id: $scope.groupId})[0];
    

这是修复了这两个问题的插件:

http://plnkr.co/edit/f9ylUZ9mpInB00zzlYQd?p=preview