的blueimp.fileupload使用了通過$觸發的事件發出通知父範圍:
on([
'fileuploadadd',
'fileuploadsubmit',
'fileuploadsend',
'fileuploaddone',
'fileuploadfail',
'fileuploadalways',
'fileuploadprogress',
'fileuploadprogressall',
'fileuploadstart',
'fileuploadstop',
'fileuploadchange',
'fileuploadpaste',
'fileuploaddrop',
'fileuploaddragover',
'fileuploadchunksend',
'fileuploadchunkdone',
'fileuploadchunkfail',
'fileuploadchunkalways',
'fileuploadprocessstart',
'fileuploadprocess',
'fileuploadprocessdone',
'fileuploadprocessfail',
'fileuploadprocessalways',
'fileuploadprocessstop'
].join(' '), function (e, data) {
if ($scope.$emit(e.type, data).defaultPrevented) {
e.preventDefault();
}
})
這意味着,你可以簡單地在父範圍控制器之一添加事件偵聽器,如:
$scope.$on('fileuploadprocessdone', function(event, files){
$.each(files, function (index, file) {
//do what you want
});
});
您也可以覆蓋默認用handleResponse功能在你的配置階段,例如:
angular.module('myApp', ['blueimp.fileupload']).
.config(['fileUploadProvider', function (fileUploadProvider){
fileUploadProvider.defaults.handleResponse = function (e,data){
var files = data.result && data.result.files;
if (files) {
data.scope().replace(data.files, files);
// do what you want...
} else if (data.errorThrown || data.textStatus === 'error') {
data.files[0].error = data.errorThrown ||
data.textStatus;
}
};
}]);
+1但值得注意的是,如果你使用angular的$ scope。$ on()綁定(v1.1.5)而不是jQuery的$ element.on()目前不接受像jQuery版本這樣的事件名稱列表。 IOW,你不能做這個$ scope。$ on(['idontwork','nor-me']。join('')],function(){})。把我抓出來。請參閱https://groups.google.com/forum/#!topic/angular/Ilv1uPOTxgY – cirrus
請注意,事件回調的第二個參數是fileupload實例,而不是包含文件的數組。使用'function(event,fileuploader){console.log(fileuploader.files); })'而不是。 – paul
那麼fileuploadDESTROY呢? – Ulrira