Javascript 与{uploadUrl}}不在作用域url中交换的数据url(AngularJS)
我正在使用jquery fileupload将文件发布到url。在我的控制器中,我有这样的东西来生成我要发布到的urlJavascript 与{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
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();
}
});
});
}
});