$ digest()在使用自定义过滤器时调用了十次

时间:2013-11-29 16:49:38

标签: javascript angularjs angularjs-filter

我有以下角度标记:

<tr ng-repeat="dia in dias">
    <td>{{ dia[0].fecha }}</td>
    <td ng-repeat="bloque in bloques">
        <div ng-repeat="hora in dia|soloBloque:bloque|sacarHoras">
            {{hora}}
            <div ng-repeat="evento in dia|soloHora:hora">{{evento.cantidad}} {{ tipoAMedida(evento.tipo) }}</div>
        </div>
    </td>
</tr>

<div ng-repeat="hora in dia|soloBloque:bloque|sacarHoras">导致angular抛出以下错误:

0x800a139e - JavaScript runtime error: 10 $digest() iterations reached. Aborting!

如果我删除其中一个过滤器,代码工作正常。根据我所知,过滤器被正确链接。可能导致这种情况的原因是什么?

以下是过滤器:

soloBloque:

function soloProp(prop) {
    return (function (prop) {
        return function () {
            return function (input, valor) {
                return _.filter(input, function (e) { return e[prop] === valor; });
            }
        }
    } (prop));
}

soloBloque = soloProp('bloque');
soloHora = soloProp('hora');

sacarHoras:

function sacarHoras () {
    return function (input) {
        return _(input).map('hora').unique();
    }
}

1 个答案:

答案 0 :(得分:0)

问题在于lodash的方法链接。 _(input)导致角度绊倒。我在return _(input).map('hora').unique();中将return _.unique(_.map(input, 'hora'));更改为sacarHoras,现在工作正常。