自分のイベントリスナーをAngularJSアプリケーションに登録するにはどうすればよいですか?自分のイベントリスナーをAngularJSに登録するには?
具体的には、Drag and Drop(DND)リスナーを登録しようとしています。そのため、ビューの新しい場所に何かがドラッグ&ドロップされると、AngularJSはビジネスロジックを再計算し、モデルとビューを更新します。
自分のイベントリスナーをAngularJSアプリケーションに登録するにはどうすればよいですか?自分のイベントリスナーをAngularJSに登録するには?
具体的には、Drag and Drop(DND)リスナーを登録しようとしています。そのため、ビューの新しい場所に何かがドラッグ&ドロップされると、AngularJSはビジネスロジックを再計算し、モデルとビューを更新します。
ディレクティブでのイベント処理とDOM操作を非表示にすることは、かなり多くの角度の方法です。スコープをコールします。$イベントが発生したときに適用されて、angleを表示してビューを更新します。
あなたは in this sampleのようにjqueryの-UIを使用して検討するかもしれない(私はangular-uiグループと連携angular wiki of examples を見て、あなたが有用見つけるかもしれないシンプルなイベントラッパーがあります。
イベントリスナーを追加リンク方法で行われますあなたがjquery-uiの.draggable()と.droppable()を使いたいのであれば、elem
のパラメータがlink
の関数であることを知ることができるでしょう。下の各ディレクティブは実際にはjQueryオブジェクトですから、elem.draggable()
に電話して、そこで何をするかを指定してください。
は、ディレクティブと角度ではdragstartを結合する例を示します。ここ
app.directive('draggableThing', function(){
return {
restrict: 'A', //attribute only
link: function(scope, elem, attr, ctrl) {
elem.bind('dragstart', function(e) {
//do something here.
});
}
};
});
は、あなたがそれを使用したい方法です。
<div draggable-thing>This is draggable.</div>
divや何かにAngularを使用してドロップする例を示します。
app.directive('droppableArea', function() {
return {
restrict: 'A',
link: function(scope, elem, attr, ctrl) {
elem.bind('drop', function(e) {
/* do something here */
});
}
};
});
これはどのように使用するのですか。
<div droppable-area>Drop stuff here</div>
私は役立つことを願っています。
あなたの経験をAngularJSと共有することに本当に感謝しています。私はAngularJSにそれほど知っていたので、今は他のサードパーティーの図書館と一緒に水を濁らない方がいいです。私は絶対にすべてのAngularJSソリューションを探しています。それで私は正しいことを理解していますか?ディレクティブは基本的にイベントですか?それとも、イベントを登録するだけですか?私はこれらの指示をもう少し詳しく聞いて、私が学んだものを報告します。ありがとう! –
ディレクティブは角度の配線です。マークアップからJSコードまで要素と属性を結びつける作業を行います。コントローラーは単にロジックとルールに過ぎず、テンプレートはUIであり、ディレクティブ($ scopeと一緒に)はそれらを結びつけるものです。 –
次のようなことが必要なときはいつでも、ディレクティブを使うことができます:1.再利用可能なコントロール。 2. DOM操作。 3.イベントバインド。 –
Benの素晴らしい解決策ですが、originalEventと元の要素にアクセスする必要があることに注意してください。 Mozillaのドキュメントによると、二つの条件https://developer.mozilla.org/en-US/docs/DragDrop/Drag_Operations
app.directive('draggableThing', function() {
return function(scope, element, attr) {
var pureJsElement = element[0];
pureJsElement.draggable = true;
element.bind('dragstart', function(event) {
event.originalEvent.dataTransfer.setData('text/plain',
'This text may be dragged');
//do something here.
});
}
});
ステップの例により、良好なステップのように見えるかもしれませんはdragstart
のリスナー
ご回答いただきありがとうございます。私はangularjsには非常に新しいので、私はそれを正しく使用しているかどうかはわかりません。いずれにしても、jquery-uiサンプルアプリを見て、jquery-drag-start、jqui-drag-end、jqui-drop-end、jqui-drag-受け入れ、およびjqui-drop-commitを実行します。あれは正しいですか?本当?私はJQueryのUIサイトに出かけましたが、これらのディレクティブは表示されませんでした。どこから来たの?これはディレクティブのようなもので、イベントハンドラと同じものを設定しています。あれは正しいですか? –
2つのディレクティブ(jqui-drag-startとjqui-drag-end)を作成したようです。 –
私は今ディレクティブを作成する方法を読んでいます... –