ng对动态创建的变量进行重复过滤

时间:2018-11-28 09:36:28

标签: angularjs angular

以前,我曾使用过技巧来动态生成这样的变量:

<div ng-click="showHide=(showHide ? false : true)">toggle bool</div>
<header ng-show="showHide"></header>

上面的代码将生成一个名为showHide的局部变量,我可以在ng- *属性上使用它。在这种情况下,当单击div时,标题将被隐藏。

是否可以为ng-repeat过滤器创建类似的解决方案,而不必向控制器添加功能(如上述示例)?

在下面的示例中,我有一个包含一堆项目的时间轴。我还获得了有关该时间轴中存在哪些项目的统计表。我希望能够以与showHide示例相同的方式按类别过滤这些项目。

这是我的代码的片段:

<!-- stat table -->
<tr ng-repeat="type in $ctrl.typeOfCategory">
    <td ng-click="filterCategory=(filterCategory ? type.name : '')">{{type.name}}</td>
</tr>

<!-- timeline -->
<div class="timeline-item" ng-repeat="msg in $ctrl.msgs | filter: filterCategory">
<div class="category">{{msg.type}}</div>
</div>

因此,每当我单击表中的项目时,我都希望时间轴将所有其他项目过滤掉。在我看来,filterCategory现在应该包含{{type.name}}的值,并过滤掉其他所有内容。

这样在角度上是否可以实现,还是我将这种技术扩展到了极限?

谢谢。

1 个答案:

答案 0 :(得分:0)

ng-repeat创建的是自己的作用域,您应该在控制器作用域中定义filterCategory,即$ctrl.filterString,然后使用它。.

<!-- stat table -->
<tr ng-repeat="type in $ctrl.typeOfCategory">
     <td ng-click="$ctrl.filterString=((type.name == $ctrl.filterString) ? '' : type.name)">{{type.name}}</td>
</tr>

<!-- timeline -->
<div class="timeline-item" ng-repeat="msg in $ctrl.msgs | filter: {type : $ctrl.filterString}">
<div class="category">{{msg.type}}</div>
</div>