angular – 从DOM元素获取ComponentRef

前端之家收集整理的这篇文章主要介绍了angular – 从DOM元素获取ComponentRef前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
已经回答了如何从Angular 2组件中获取DOM元素:ComponentRef.location.nativeElement(ComponentRef.location给出了可以直接访问DOM的ElementRef).

但是如何做相反的事情,即当我只有原生DOM对象时获取对ComponentRef的引用?

当我尝试使用interact.js拖放Angular 2组件时就是这种情况.该库使用回调函数通知拖动哪个元素,以及我们尝试删除哪个元素.提供了一个事件对象,我发现的唯一有用信息是DOM元素(目标属性).

例:

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.
    }
    // ...
});

Plunker here

您可以在src / Interactjs.ts中检查处理程序.打开控制台以查看关联的日志并将组件放在另一个组件上.我有DOM的元素信息,但我想要Angular组件,比如说访问count属性.

调查结果和尝试:

我发现了一个solution for the jquery-ui-draggable plugin,但这个技巧在这里不起作用,至少对于要放弃的目标.

还有topics关于如何在DOM中插入,谈论DomAdapter,但我还没有找到任何似乎有助于从DOM到Angular组件引用的方法.

我只是考虑对我的组件进行手动搜索:在DOM节点中循环,计数以找到位置,并从同一位置的组件列表到达组件,但它太丑了……

对此有任何建议是值得欢迎的.谢谢阅读!

这可以使用 ElementProbe API来实现.它主要用于调试/量角器集成,类似于Angular 1中的element.scope().

要使用此API,您需要在bootstrap()调用中包含ELEMENT_PROBE_PROVIDERS.然后,您可以通过调用全局ng.probe()来获取任何组件实例.

例如,以下是获取当前事件目标的组件实例的方法

ng.probe(event.target).componentInstance

Updated Plunker showing this is action

您可以看到ElementProbe API Here的实际实现.

猜你在找的Angularjs相关文章