【问题标题】:overzealous filter on nested ng-repeat嵌套 ng-repeat 上的过度热心过滤器
【发布时间】:2014-03-17 10:25:56
【问题描述】:

我有一系列ng-repeated ul/li 集,我想让一组li 在单击ul 级别的链接时可见。

我的代码基于此处找到的答案:https://stackoverflow.com/a/12431211,这表明模型突变是执行此操作的正确方法。

过滤器似乎比预期的更热心,我最终一无所获。

我怎样才能实现这个功能?

div ng-controller="DeviceController">
    <ul ng-repeat="category in devices">
        <a ng-click="setCategory(category)">{{category.name}}</a>
        <li ng-repeat="device in selected.devices | filter: isSelected(category)">
            <a href="device?id={{device.ID}}">{{device.name}}</a>
        </li>
    </ul>
</div>

function DeviceController($scope) {
    $scope.devices = [
        {name: 'Desktop',
         devices: [{id:1, name:'Olivia'},
                   {id:2, name:'Cayenne'}]
        },
        {name: 'Laptop',
         devices: [{id:3, name:'Probook'},
                   {id:4, name:'Asus G750'}]
        },
        {name: 'Tablet',
         devices: [{id:5, name:'Transformer Prime'},
                   {id:4, name:'Galaxy Note 10.1'}]
        }
    ];

    $scope.setCategory = function(category) {
        $scope.selected = category
    }

    $scope.isSelected = function(category) {
        return $scope.selected === category;
    }
}

小提琴在这里:http://jsfiddle.net/3rV6w/6/

我无法弄清楚为什么 isSelected() 函数作为活动类的条件(在引用的答案中)可以很好地工作,但作为过滤器的性能却不一样。范围也许?各种 console.log 建议它应该可以工作,但是..

【问题讨论】:

    标签: angularjs-ng-repeat angularjs-filter


    【解决方案1】:

    我最终放弃了过滤器,改用 ng-hide。

    <ul ng-repeat="category in devices">
        <a ng-click="setCategory(category)">{{category.name}}</a>
        <li ng-repeat="device in selected.devices" ng-hide="!isSelected(category)">
            <a href="device?id={{device.ID}}">{{device.name}}</a>
        </li>
    </ul>
    

    我认为正在发生的事情是 ng-filter 将“设备”与 isSelected(category) 返回的真/假进行比较。这永远不会匹配,因此没有任何结果通过过滤器。

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2014-06-21
      • 2020-05-28
      • 1970-01-01
      相关资源
      最近更新 更多