【发布时间】:2017-10-29 16:40:52
【问题描述】:
我在 angularJS 中开发了拖放指令,它在我的导航器(计算机)上运行,但在我的触摸设备上却不起作用。我应该做些什么来调整我的代码以在我的触摸设备上工作?还是我应该更改指令中的代码?在这里你可以找到我的代码的 sn-p
module.exports = angular
.module('app.dashboard.controller', ['ngTouch'])
.controller('appDashboard', appDashboard)
.directive('draggable', draggable)
.directive('droppable', droppable);
function droppable() {
return {
scope: {
drop: '&',
bin: '='
},
link: function(scope, element) {
// again we need the native object
var el = element[0];
el.addEventListener(
'dragover',
function(e) {
e.dataTransfer.dropEffect = 'move';
// allows us to drop
if (e.preventDefault) e.preventDefault();
this.classList.add('over');
return false;
},
false
);
el.addEventListener(
'dragenter',
function(e) {
this.classList.add('over');
return false;
},
false
);
el.addEventListener(
'dragleave',
function(e) {
this.classList.remove('over');
return false;
},
false
);
el.addEventListener(
'drop',
function(e) {
// Stops some browsers from redirecting.
if (e.stopPropagation) e.stopPropagation();
this.classList.remove('over');
var binId = this.id;
var item = document.getElementById(e.dataTransfer.getData('Text')).cloneNode(true);
item.classList.remove('drag');
this.appendChild(item);
// call the passed drop function
scope.$apply(function($scope) {
var fn = scope.drop();
if ('undefined' !== typeof fn) {
fn(item.id, binId);
}
});
return false;
},
false
);
}
}
}
function draggable() {
return {
scope: {
drag: '&' // parent
},
link: function(scope, element) {
// this gives us the native JS object
var el = element[0];
el.draggable = true;
el.addEventListener(
'dragstart',
function(e) {
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('Text', this.id);
this.classList.add('drag');
return false;
},
false
);
el.addEventListener(
'dragend',
function(e) {
this.classList.remove('drag');
return false;
},
false
);
}
}
}
【问题讨论】:
-
我应该在哪里调用我的代码中的 init() 函数?我的代码中没有 document.ready
-
为什么不能写成js文件加载?
-
对不起,我是 angularJS 的新手,所以感谢您的帮助:) 谢谢
标签: javascript angularjs angular-directive