javascript - SVG.js - 如何在 Angular 中访问 shadow-root(打开)中的元素
问题描述
我目前正在从事Angular Elements项目。在这个自定义组件中,我想使用SVG.js 3+。但是由于我需要ViewEncapsulation.ShadowDom
在我的组件中使用,我在初始化 SVG.js 时遇到了一些问题。
创建 SVG 和绘制矩形的标准过程如下:
this.draw = SVG().addTo("#SVGContainer").viewbox(0, 0, 300, 140);
this.draw.rect(100, 100).move(100, 50).fill('#f06')
这里的问题是.addTo("#SVGContainer")
只能找到不在 shadow-root 中的元素。我已经用我的使用 shadow-root 的组件和不使用 shadow-root 的容器对其进行了测试。正如预期的那样,SVG.js 在没有 Shadow Dom 的 Angular 项目中工作,但在使用 shadow-root 的项目中没有工作。
我知道container.shadowRoot.querySelector(".test").innerHTML
你可以访问影子元素,但该函数.addTo()
只允许我传递我的元素的 id,所以没有传递 dom 元素本身的选项。
由于ViewEncapsulation.ShadowDom
这是我的新自定义 Web 组件的要求,我想知道是否可以将 shadow-dom 元素传递给 SVG.js,或者根本不可能。
解决方案
解决了这个问题。就在我按照在他们的 Github 上创建问题的建议时,我遇到了这个Github 问题,其中用户说他们甚至支持 shadow dom 很好,你可以直接传递元素很好,但他们应该记录它。
他说你可以直接传递元素。所以我不得不再试一次,而且很好。有效。我为我的容器创建了一个 ViewChild 参考,如下所示:
@ViewChild('svgContainer') svgContainer: any;
并将其传递给.addTo()
这样的:
this.draw = SVG().addTo(this.svgContainer.nativeElement).viewbox(0, 0, 300, 140);
所以有两件事为什么它第一次不起作用。首先,我没有找到他们说您可以传递元素本身的文档(如果有的话)。而且当我第一次尝试时,我忘了添加.nativeElement
.
推荐阅读
- python - 从主文件夹的子文件夹中随机提取文件
- javascript - 如何循环对象数组以根据另一个字符串数组过滤掉
- python-3.x - 字典到 csv 只会产生不完整/不正确的数据
- android - Xposed - 我可以打印内部类方法,但方法挂钩不起作用
- reactjs - React Hook useState 构造函数与 Asyncstorage
- php - 在 WooCommerce 中购买产品后,将相关订单 ID 添加为用户元数据
- android - 获取 gpx 轨道的界限
- windows-server-2012 - 在 windows server 2016 中是否兼容 Visual source safe 2005
- mobile - wso2 安装按钮在移动应用程序管理上不起作用
- python - 如何设置文件缓冲参数?