目标:
仅将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:我已经在指令中实现了这个逻辑;我正在研究使用过滤器实现可移植性的可能性。