以前,我曾使用过技巧来动态生成这样的变量:
<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}}
的值,并过滤掉其他所有内容。
这样在角度上是否可以实现,还是我将这种技术扩展到了极限?
谢谢。
答案 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>