如果您要在不破壞引用推單指令使用apply
一切scope.cachedData
Array.prototype.push.apply(scope.cachedData, data.Result);
而且,我知道這是一個有點題外話,但如果你想要在特定索引處插入您可以使用的splice
與apply
// I definitely want to prepend to my array here
var insertionIndex = 0,
// we don't want to delete any elements here from insertionIndex
deleteCount = 0;
// Because we use apply the second argument is an array
// and because splice signature is (startIndex, noOfElementsToDelete, elementsToInsert)
// we need to build it
Array.prototype.splice.apply(scope.cachedData, [insertionIndex, deleteCount].concat(data.Result));
想象一下您的數組scope.cachedData = [3,4];
和data.Result = [1,2];
,其中scope.cachedData
以上的代碼將變爲[1,2,3,4]
。
也許是因爲concat不會修改相同的數組,但會返回一個新的數組... try * scope.cachedData = scope.cachedData.concat(data.Result)' – doodeec
@doodeec - 你是完全正確的。從性能的角度來看,這個新任務會比.push更糟糕嗎?是否有可能做一些.pushAll()方法,而不是在做? – kape123
我認爲push可以更快,因爲它不會改變原始數組中的現有引用,它只是增加了一個新的引用...所以如果你在'ng-repeat'中使用數組,它會更快地更新,元素將會更新時不閃爍 – doodeec