在我的应用程序中,我需要上传文件,并尝试实现该功能,允许将新文件添加到文件数组而不是覆盖它。
我就是这样做的:
if (files) {
angular.forEach(files, function(file) {
$scope.files.push(file);
});
}
其中files可以是File
对象的数组,也可以只是单个文件。
早期我尝试将文件作为$scope.files.push(files)
推送到范围,但结果我得到了嵌套数组的数组,无法通过ng-repeat
处理它。
我也尝试了$scope.files.concat(files)
,但结果我得到了空数组;
我也试过angular.extend($scope.files, files)
,但结果很奇怪:
当我添加单个文件时,它不会被推送到$ scope.files,而只是将$scope.files
第一个元素替换为自身。如果files
包含多个元素,则结果相同。
问题:它是否存在更紧凑(也许更快)的方式将自定义范围与对象数组或仅一个对象合并?
第二个问题:为什么当我尝试angular.extend($scope.files, files)
时,它没有将两个数组合并为一个数组,包含两者的元素,只是用源代替目标数组?
答案 0 :(得分:2)
Javascript的Array concat函数返回一个由传入的数组组成的新数组。所以你需要将结果分配回你的范围变量:
if (files) {
$scope.files = $scope.files.concat(files);
}
答案 1 :(得分:0)
检查files
是否是数组或对象,然后是concat或push:
//null check and object check
if (files && typeof files === "object") {
if (files.length) {
$scope.files = $scope.files.concat(files); //array merge
} else {
$scope.files.push(files); //single obj
}
}