在编写属性指令时,我想将一个参数传递给该指令,这是一个可以写入的属性路径。(很像 ng-model 属性在输入上的工作方式。)如何设置指令以便我可以写入它?
示例:以AngularJS 网站上的 Draggable 指令为例。您只需在元素上声明属性即可使用它。
<span draggable>Drag ME</span>
我想创建一个如下所示的新指令:
<span draggable="somePath.someObj">Drag ME</span>
并且当在指令内部观察事物时(比如元素的位置),值将被写入位于范围上 somePath.someObj 的对象。
这是我开始的基本指令:
angular.module('drag', []).
directive('draggable', function($document) {
return function(scope, element, attr) {
var startX = 0, startY = 0, x = 0, y = 0;
element.css({
position: 'relative',
border: '1px solid red',
backgroundColor: 'lightgrey',
cursor: 'pointer'
});
element.on('mousedown', function(event) {
// Prevent default dragging of selected content
event.preventDefault();
startX = event.screenX - x;
startY = event.screenY - y;
$document.on('mousemove', mousemove);
$document.on('mouseup', mouseup);
});
function mousemove(event) {
y = event.screenY - startY;
x = event.screenX - startX;
element.css({
top: y + 'px',
left: x + 'px'
});
}
function mouseup() {
$document.unbind('mousemove', mousemove);
$document.unbind('mouseup', mouseup);
}
}
});
(Plunkr 在网站上找到。不确定实际链接是什么)