【问题标题】:ng repeat filter on dynamically created variable对动态创建的变量进行 ng 重复过滤
【发布时间】:2018-11-28 18:36:16
【问题描述】:

之前我使用了一个技巧来动态生成这样的变量:

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

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

有没有办法为ng-repeat过滤器创建类似的解决方案,而无需向控制器添加功能(如上面的示例)?

在下面的示例中,我有一个包含一堆项目的时间线。我还有一个关于此时间线中存在哪些项目的统计表。我希望能够使用与 showHide 示例相同的方法按类别过滤这些项目。

这是我的代码的 sn-p:

<!-- 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}} 的值,并过滤掉其他所有内容。

这样的东西在角度上是否可以实现,或者我是否将这种技术延伸到了极限?

谢谢。

【问题讨论】:

    标签: angularjs angular


    【解决方案1】:

    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>
    

    【讨论】:

    • 在我发布这个问题之后,我自己就采用了这种方法。我注意到动态创建的变量不幸在更深层次的代码中不起作用。这主要是为什么我会接受这个作为问题的答案。它有效,但不是我想要的 :( 我可以更新您的代码,为您提供我实际使用的解决方案,然后将其标记为答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2014-10-06
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多