Javascript AngularJs使用数据绑定刷新将多个值从数组推送到另一个数组
我正在从服务器获取一个数组,该数组中可以包含0..n个元素。然后,我将其添加到本地用于数据绑定的数组中(基本上是在客户端缓存数据)。以这种方式进行时,数据分类不会出现任何问题:Javascript AngularJs使用数据绑定刷新将多个值从数组推送到另一个数组,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我正在从服务器获取一个数组,该数组中可以包含0..n个元素。然后,我将其添加到本地用于数据绑定的数组中(基本上是在客户端缓存数据)。以这种方式进行时,数据分类不会出现任何问题: for (var i = 0 ; i < data.Result.length ; i++) { scope.cachedData.push(data.Result[i]); } for(var i=0;i
for (var i = 0 ; i < data.Result.length ; i++) {
scope.cachedData.push(data.Result[i]);
}
for(var i=0;i
意思-视图刷新,一切正常。但是当我尝试时:
scope.cachedData.concat(data.Result)代码>它不会工作。为什么会这样?如果要在一条指令中推送所有内容,请使用apply
而不中断对作用域的引用。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]代码>,使用上面的代码作用域。cachedData
将成为[1,2,3,4]
如果要在单个指令中推送所有内容,请使用应用而不中断对作用域的引用。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]
,使用上面的代码作用域。cachedData
将成为[1,2,3,4]
,可能是因为concat不修改相同的数组,而是返回一个新数组。。。试试scope.cachedData=scope.cachedData.concat(data.Result)
@doodeec-你完全正确。从性能的角度来看,这个新任务会比.push更糟糕吗?是否可以执行一些.pushAll()方法而不是在中执行它?我认为推送可以更快,因为它不会更改原始数组中现有的引用,它只是添加了一个新的引用。。。因此,如果您在ng repeat
中使用数组,它将更新得更快,并且元素在更新时不会闪烁,这可能是因为concat不会修改相同的数组,而是返回一个新数组。。。试试scope.cachedData=scope.cachedData.concat(data.Result)
@doodeec-你完全正确。从性能的角度来看,这个新任务会比.push更糟糕吗?是否可以执行一些.pushAll()方法而不是在中执行它?我认为推送可以更快,因为它不会更改原始数组中现有的引用,它只是添加了一个新的引用。。。因此,如果您在ng repeat
中使用数组,它将更新得更快,并且元素在更新nice one时不会闪烁,我肯定会开始使用nice one,我肯定会开始使用它