Javascript AngularJS文件上载发送过时的formData

Javascript AngularJS文件上载发送过时的formData,javascript,angularjs,file-upload,form-data,Javascript,Angularjs,File Upload,Form Data,我用它来上传文件 我有一个表单,除了上传文件,还发送一些其他字段。为清楚起见,在本例中,我只发送一个字段: $scope.save_with_upload=函数(用户){ $scope.uploader.formData=[{ name:user.name, }]; $scope.uploader.uploadAll(); } 假设name输入的值是test1 当我第一次加载页面并单击保存时,它会发送文件,但根本不发送formData 然后我将name字段更改为test2并点击Save。它发送

我用它来上传文件

我有一个表单,除了上传文件,还发送一些其他字段。为清楚起见,在本例中,我只发送一个字段:

$scope.save_with_upload=函数(用户){
$scope.uploader.formData=[{
name:user.name,
}];
$scope.uploader.uploadAll();
}
假设
name
输入的值是test1

  • 当我第一次加载页面并单击保存时,它会发送文件,但根本不发送
    formData
  • 然后我将
    name
    字段更改为test2并点击Save。它发送文件和
    formData
    但是它发送的
    name
    的值是test1
  • 然后我将
    name
    字段更改为test3并点击Save。它发送文件和
    formData
    但是它发送的
    name
    的值是test2
  • ……等等
  • 因此,它似乎总是在最后一次调用
    uploadAll
    之前发送分配给
    formData
    的数据

    澄清一下:如果我在调用
    uploadAll
    之前执行了
    dir(user$scope.uploader.formData)
    ,它将在这两个字段中显示正确的最新值


    我已经挣扎了几个小时,只是看不出有什么问题。有什么想法吗?

    将表单字段附加到
    FileItem
    对象,而不是
    FileUpload
    ,解决了以下问题:

    uploader.onBeforeUploadItem = function(item) {
        formData = [{
            name: user.name,
        }];
        Array.prototype.push.apply(item.formData, formData);
    };
    

    原因是,实际上使用了
    FileItem
    上的设置。将文件添加到队列时,将
    FileUpload
    中的设置复制到
    FileItem
    。因此,在将文件添加到队列后对
    FileUpload
    选项所做的任何更改都将无效。

    此回调将转到何处?我在控制器中试过,但没有运行。你能把它扔到视图中吗?还有为什么你不能做
    item.formData.push(formData)
    ?@bischoffingston这个代码需要放在控制器中<代码>上传程序必须是
    文件上传
    的实例
    item.formData.push(formData)
    Array.prototype.push.apply(item.formData,formData)
    是等效的。