javascript - Angular 1.0.8 : How to skip an iteration in ng-repeat

标签 javascript angularjs

有没有一种方法可以跳过 ng-repeat 中的迭代而不操作它迭代的底层数组/对象?

假设我们有这个:

var steps = [
    {
        enabled: true
    },
    {
        enabled: true
    },
    {
        enabled: false
    }
];

我想通过查看它的“enabled”键来跳过第三步。 在更现代的 Angular 我会使用:

<div data-ng-repeat="step in steps" data-ng-if="step.enabled">

但是 ng-if 在 1.0.8 中不存在。

我试过像这样创建一个过滤器:

<div data-ng-repeat="step in steps | isEnabled" data-ng-if="step.enabled">

JS:

filter('isEnabled', function() {
    return function(input) {

        for(var i = 0; i < input.length; i++) {
            if(!input[i]['enabled']) {
                input.splice(i, 1);
            }
        };

        return input;
    };
})

但是,操作原始步骤对象是不可能发生的。 然后我尝试克隆这些步骤:

filter('isEnabled', function() {
    return function(input) {

        var stepsBackup = angular.copy(input);

        for(var i = 0; i < stepsBackup.length; i++) {
            if(!stepsBackup[i]['enabled']) {
                stepsBackup.splice(i, 1);
            }
        };

        return stepsBackup;
    };
})

但这只会引发错误:错误:达到 10 次 $digest() 迭代。中止!...

我错过了什么?

最佳答案

无需定义自定义过滤器。如果您将对象作为 filter: 表达式传递,AngularJS 过滤器支持对属性进行过滤。例如:

<li ng-repeat="step in steps | filter: {enabled: true}">...</li>

看看这个 fiddle ,我认为它展示了你想要的东西(它使用 Angular 1.0.8):

http://jsfiddle.net/ck9u6/

关于javascript - Angular 1.0.8 : How to skip an iteration in ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977570/

相关文章:

javascript - Three.js 在鼠标点击的地方绘制,但完全平行于相机方向

javascript - 如何停止 webdriver 而不导致 Node js 崩溃

javascript - 如何在 Angular $resource中使用自定义操作

angularjs - 单选按钮中的 ng-click 未被调用

javascript - 如何在 Angular 中重复作用域函数

javascript - Angularjs $stateChangeStart 检查字符串是否在对象中

javascript - HTML5 : Filesystem API Chrome 30 - Unexpected errorHandler call

javascript - R - 如何从下载的 HTML 代码中提取 JavaScript 对象中的值

javascript - jQuery 语法错误,无法识别的表达式

javascript - 如何在指令上测试 Angular $destroy 事件?