有没有办法限制AngularJS过滤器只为新值执行?

时间:2016-04-01 13:39:13

标签: javascript angularjs angular-filters

目标:

仅将AngularJS过滤器执行限制为新值。

问题:

无论输入状态如何,

AngularJS过滤器都会在每个$摘要周期执行。

HTML:

<div>{{ ::keyArray | keyToObjectArray }}</div>

Psudo代码:

angular
    .module('app')
    .filter('keyToObjectArray', keyToObjectArray)

function keyToObjectArray() {
    var oldArray = null;
    return function (newArray) {
        // Run only for new inputs
        if (oldArray && angular.equals(newArray, oldArray)) return [];

        var objectArray = [],
            // assign newArray to oldArray
            oldArray = newArray,
            arrayLength = newArray.length,
            position = 0;

        angular.forEach(newArray, function (key) {
            // AJAX request to get object
            getValueObject(key)
            .then(function (objectValue) {
                objectArray.push(objectValue);
            });

            // Update the position
            position = position + 1;

            // Check for completion
            if (position === arrayLength) {
                return objectArray;
            };
        });
    };
};

P.s:我已经在指令中实现了这个逻辑;我正在研究使用过滤器实现可移植性的可能性。

0 个答案:

没有答案