Angular 2コンポーネントからDOM要素を取得する方法は既に回答済みです:ComponentRef.location.nativeElement
(ComponentRef.locationはDOMに直接アクセスできるElementRefを与えます)。DOM要素からComponentRefを取得
しかし私はネイティブDOMオブジェクトのみを持っている場合、つまり逆にComponentRefへの参照を取得する方法は?
interact.jsを使用してAngular 2コンポーネントをドラッグ/ドロップしようとした場合です。ライブラリは、コールバック関数を使用して、ドラッグされた要素と、ドロップしようとしている要素を通知します。 event
オブジェクトが提供されています。唯一有益な情報はDOM要素(target
属性)です。
例:
interact('my-component-tag').draggable({
// ...
onstart: function (event:any) {
var dom = event.target; // ref to the <my-component-tag> tag
// How to find the Angular ComponentRef object here?
}
// ...
}).dropzone({
// ...
ondragenter: function (event:any) {
var targetDom = event.relatedTarget; // targeted <my-component-tag> tag
// Same question here,
// to identify where we want to insert the dragged element.
}
// ...
});
あなたはsrc/Interactjs.ts
にハンドラを確認することができます。コンソールを開いて関連するログを表示し、別のコンポーネントにコンポーネントをドロップします。私はDOMによって要素に関する情報を持っていますが、代わりにAngularコンポーネントが必要です。count
属性にアクセスしましょう。
調査結果と試行は:
は私がsolution for the jquery-ui-draggable pluginを見つけましたが、このトリックは、少なくともドロップするターゲットのために、ここでは動作しません。
DOMに挿入する方法については、topicsもありますが、DomAdapterについて話していますが、DOMからAngularコンポーネントへの参照に役立つような方法は見つかりませんでした。
私は、DOMノードでループして位置を見つけ、同じ位置のコンポーネントリストからコンポーネントに到達しましたが、私のコンポーネント上で手動検索を考えましたが、それはとても醜いです...
これに関するアドバイスは大歓迎です。読んでくれてありがとう!
恐ろしい!私はそれが可能ではなかったと思った、ありがとう!角度のあるぐいぐりのグループから私が得たアドバイスは、角度を広げるためにデザインを変更することでした。私は実際にDOMを操作することを避けるために完全に異なるコード構造に移行しましたが、あなたのソリューションは私の質問に示されているように明らかにこの問題を解決します。 – Antoine
これはまだ2.0の下に存在しますか? – sqwk
動作しません。 「ng」はありません。 – Phill