2016-01-22 40 views
0

在我的應用程序中,我需要上傳文件,並嘗試實現該功能,允許將新文件添加到文件數組而不是覆蓋它。AngularJS。我需要緊湊的方式來合併自定義範圍與對象數組或單個對象

這是我要做的事:

if (files) { 
    angular.forEach(files, function(file) { 
     $scope.files.push(file); 
    }); 
} 

那裏文件可以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)時,它沒有將兩個數組合併成一個數組,它包含兩個元素,但只是用源代替目標數組?

+1

'$ scope.files = $ scope.files.concat(文件)'(不像推,'concat'不會修改它呼籲陣列,它返回級聯數組來代替。 ) –

+0

@DanielBeck謝謝!有用! –

+0

沒有汗水。在JavaScript中激怒不一致,我自己被它抓住了 –

回答

2

JavaScript的數組concat函數返回由傳入的陣列的新陣列所以,你需要將結果賦回給你的範圍變量:

if (files) { 
    $scope.files = $scope.files.concat(files); 
} 
0

檢查files是一個數組或對象,然後要麼CONCAT或推:

//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 
    } 
} 
相關問題