角度过滤器和ng-click不起作用

时间:2016-05-13 10:01:37

标签: javascript angularjs filter ng-repeat angularjs-ng-click

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

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

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

我还创建了一个过滤器,可以从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>

然而,它也没有用。我可以在控制台中记录正确的数组,但表中没有显示任何数据。

请看一下这个Plunker

2 个答案:

答案 0 :(得分:1)

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

void myFunc_impl(A& aPart, B& bPart); // aPart and bPart are from the same object.

template <typename T>
void myFunc(T& obj) {
    // static_assert to have better error messages
    static_assert(std::is_base_of<A, T>::value, "T should inherit from A");
    static_assert(std::is_base_of<B, T>::value, "T should inherit from B");
    // Forwarding to implementation
    myFunc_impl(obj, obj);
}

因为currentGroup也是一个数组

答案 1 :(得分:1)

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

  1. ng-repeat创建了自己的子范围,因此当您执行ng-click="groupId = group.id"时,您要分配子范围groupId,您应该设置父级的范围:

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

    但这看起来并不那么好;尝试使用as syntax,或从函数中分配。

  2. $filter会返回一个数组,因此您必须选择第一个元素才能正确分配currentGroup

    $scope.currentGroup =  $filter('filter')(data, {id: $scope.groupId})[0];
    
  3. 这是一个修剪这两个的plunker:

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