属性ディレクティブを書くとき、書き込み可能なプロパティパスである引数をディレクティブに渡したいと思います。(ng-model 属性が入力に対してどのように機能するかによく似ています。) ディレクティブに書き込みできるようにするには、どのようにディレクティブを設定すればよいですか?
例: AngularJS Web サイトにある 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 は Web サイトにあります。実際のリンクが何であるかはわかりません)