angular.copy和angular.extend - 仍然引用原始数组的副本

时间:2014-09-04 15:42:12

标签: javascript arrays angularjs

我检查了SO并发现了这个问题angular.copy() isn't creating an independent copy of an object - 标题描述了我遇到的问题,但答案没有帮助。

我正在尝试复制数组,使用该数组广播事件,然后清除源数组。在这样做时,我的副本也是空的。我可以通过注释掉清除源代码的代码来验证副本是否与我的目标填充一样多。

我已经尝试了angular.copyangular.extend(确保我的参数配置正确,因为它们与这两种方法相反)

我也尝试使用scope上的数组而不仅仅是局部变量 - 这没有区别

使用它的代码部分是:

    dz.on('queuecomplete', function () {
        console.log('queue complete')
        console.log(uploadedFiles)
        var filesOut = [];
        angular.copy(uploadedFiles, filesOut);
        $rootScope.$broadcast('file.upload.complete', { files: filesOut });
        scope.uploadComplete = true;
        scope.completeMessage = 'Wooohoo!'
        resetAll();
    });

    function resetAll() {
        dz.removeAllFiles();
        scope.hasTooMany = false;
        scope.hasBadTypes = false;
        scope.manualUpload = false;
        hasHadErrors = false;
        // If i comment this out then my listener (below) shows all files
        // if i leave this as-is then both source and dest arrays are empty
        uploadedFiles = [];
        scope.$apply();
    }

在另一个控制器中,我正在听$broadcast

var filesUploaded = $scope.$on('file.upload.complete', function (event, data) {
    console.log('files uploaded:')
    // if 'uploadedFiled = []' is not commented out then data.files is an empty array
    console.log(data);
});

如上所述,我也尝试过延伸。

我缺少什么?或者我期待这些方法不适合的东西?

0 个答案:

没有答案