【发布时间】:2013-01-20 16:06:09
【问题描述】:
这个例子做了很多我想在 Angular-js 中移植的东西:HTML5 File API。
我一直在尝试在 Google 上搜索一些指令示例,但我发现旧示例大量使用 DOM 或不是为 Angular 1.0.4 编写的。
基本上这是纯js代码:
var holder = document.getElementById('holder'),
state = document.getElementById('status');
if (typeof window.FileReader === 'undefined') {
state.className = 'fail';
} else {
state.className = 'success';
state.innerHTML = 'File API & FileReader available';
}
holder.ondragover = function () { this.className = 'hover'; return false; };
holder.ondragend = function () { this.className = ''; return false; };
holder.ondrop = function (e) {
this.className = '';
e.preventDefault();
var file = e.dataTransfer.files[0],
reader = new FileReader();
reader.onload = function (event) {
console.log(event.target);
holder.style.background = 'url(' + event.target.result + ') no-repeat center';
};
console.log(file);
reader.readAsDataURL(file);
return false;
};
我能想到的唯一可能的方法是创建一个指令
edo.directive('fileDrag', function () {
return {
restrict: 'A',
link: function (scope, elem) {
elem.bind('ondrop', function(e){
e.preventDefault();
var file = e.dataTransfer.files[0], reader = new FileReader();
reader.onload = function (event) {
console.log(event.target);
holder.style.background = 'url(' + event.target.result + ') no-repeat center';
};
console.log(file);
reader.readAsDataURL(file);
return false;
});
}
};
});
但是(1)它不起作用,(2)在我修复它之前我想知道是否存在某些东西或者我是否正确地做,
非常感谢任何提示或帮助。
【问题讨论】:
-
有什么不好的地方?
-
显然 elem.bind('drop') 不起作用。 ://
-
据此:stackoverflow.com/questions/9544977/… 您需要在其他两个拖动事件中防止默认值。在此答案中粘贴的示例中,只需将
$('#div')替换为element我还推荐使用on而不是绑定。它的工作方式与绑定相同。 -
.on 是否包含在 Angular 中?
-
哦,是的,我想不是,在这种情况下,继续
bind:)
标签: javascript html file-upload angularjs angularjs-directive