Javascript 与{uploadUrl}}不在作用域url中交换的数据url(AngularJS)

Javascript 与{uploadUrl}}不在作用域url中交换的数据url(AngularJS),javascript,jquery,angularjs,jquery-file-upload,Javascript,Jquery,Angularjs,Jquery File Upload,我正在使用jquery fileupload将文件发布到url。在我的控制器中,我有这样的东西来生成我要发布到的url uploadService.getUploadURL($scope.projectId).then(function (url) { $scope.uploadUrl = url.uploadUrl; }); 然后在我看来,我有这个来填充数据url <span id="btn-browse" class="btn btn-success btn-file"&g

我正在使用jquery fileupload将文件发布到url。在我的控制器中,我有这样的东西来生成我要发布到的url

uploadService.getUploadURL($scope.projectId).then(function (url) {
     $scope.uploadUrl = url.uploadUrl;
});
然后在我看来,我有这个来填充数据url

<span id="btn-browse" class="btn btn-success btn-file">Browse<input type="file" name="file" data-url="{{uploadUrl}}" multiple upload /></span>
从上传服务

upload: function () {
    $.each(_files, function (ix, file) {
         file.submit();
    });
    this.clear();
}
还值得一提的是,jquery fileupload是在如下指令中实现的:

$(element).fileupload({
    dataType: "text",
    add: function (e, data) {
         uploadService.add(data);
    },

    progressall: function (e, data) {
         var progress = parseInt(data.loaded / data.total * 100, 10);
         uploadService.setProgress(progress);
    },

    done: function (e, data) {
         uploadService.uploadDone();
    }
});

即使您已经创建了一个指令,但在创建文件上载时,还没有加载url

您可以做的是在uploadUrl指令中添加watch,如果它更改了它的值,则使用jquery创建文件上传器

$scope.watch('uploadUrl',function(newValue, oldValue ){
   if(newValue!==oldValue){
    setTimeout(function(){
       $(element).fileupload({
        dataType: "text",
        add: function (e, data) {
           uploadService.add(data);
         },

         progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            uploadService.setProgress(progress);
         },

         done: function (e, data) {
            uploadService.uploadDone();
         }
     });
    });
   }
});

你能显示与文件post相关的代码吗?请参阅我在上面所做的编辑。可能是在你将元素转换为jquery文件上载时,上载URL可能尚未解析。尝试$timeoutfunction{$element.fileupload{}如果$timeout解决方案对您不起作用,请创建一个plnkr。尽管我最终没有这样做,因为我需要在每个文件的基础上更新url。但这个解决方案解决了上述问题。
$scope.watch('uploadUrl',function(newValue, oldValue ){
   if(newValue!==oldValue){
    setTimeout(function(){
       $(element).fileupload({
        dataType: "text",
        add: function (e, data) {
           uploadService.add(data);
         },

         progressall: function (e, data) {
            var progress = parseInt(data.loaded / data.total * 100, 10);
            uploadService.setProgress(progress);
         },

         done: function (e, data) {
            uploadService.uploadDone();
         }
     });
    });
   }
});