【问题标题】:SVG elements rendering in browser but not visible on screenSVG 元素在浏览器中呈现但在屏幕上不可见
【发布时间】:2019-11-24 16:22:56
【问题描述】:

我正在使用DomSanitizerSafeHtmlsvg 代码注入到我的组件中。我可以在控制台中看到所有元素都在渲染,但它们在我的屏幕上不可见。我正在使用DomSanitizer,因为我正在从数据对象生成代码。这是代码生成的元素的示例

<svg:polyline id="left_arm_line_10" points="67.379982,339.7200012 72.1800003,562.5199585 61.2800064,592.4199829 75.0799942,614.3199463 76.2800064,715.4199829 81.2800064,756.4199829 85.2800064,712.5199585 84.879982,603.5199585 74.7800064,587.5199585 85.6800003,558.2199707 85.379982,347.519989" stroke="black" stroke-width=".22" fill="none" />

直接粘贴在&lt;svg&gt;&lt;/svg&gt; 标记之间时,它会在屏幕上可见。我正在以这种方式呈现我的svg.component

<svg:g svg-component [Data]="SvgData"></svg:g>

我制作了一个 stackblitz 演示,您可以使用 view here,我注意到在此演示中 graphic.component 渲染但不是 svg 在模板内。除了所有数据都清楚地显示在需要看到的地方,我可以复制和粘贴输出的 svg 元素,我真的不知道这里出了什么问题。在此之前,我在 svg.component 模板中使用了 &lt;text&gt; 元素来处理 component works 文本,它渲染得很好,所以我真的不明白现在有什么不同。

【问题讨论】:

  • 大概他们在错误的命名空间中。
  • 你到底是什么意思?
  • 好的,我阅读了该文档,到目前为止,我正在按照它建议的方式应用所有内容。你能具体指出我做错了什么吗?
  • 也许 DomSanitizer 和 SafeHtml 根本不支持非 HTML 命名空间。

标签: angular svg


【解决方案1】:

您的 svg 有问题。 stackblitz with working svg in template url

一个像下面这样的简单 svg 就像一个魅力。

<svg height="100" width="100">
  <circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="red" />
</svg> 

您的 svg 的问题是您的视图框偏离了方向,这就是您的 svg 不可见的原因。

在 stackblitz 中检查 1000 1000 视图框(缩小),您将看到您的 svg 已被渲染和显示。只是不在你期望的地方。它在页面下方,您需要更高的视口才能使其可见。

【讨论】:

  • 是的,我注意到当我将元素直接放入 SVG 标记时,它确实会显示出来。我试图弄清楚为什么迭代到graphic.component 的那个没有渲染。我需要那个工作,因为我设置了实际代码来将每个元素迭代到一个组件中。我修改了viewBox,看看它是否像你提到的那样出现在其他地方,但直到我将它直接放入&lt;svg&gt;tags 之前它根本不可见。
  • 你能给我看一个可见的演示吗?我大大扩展了视口,甚至为整个元素添加了填充,只是为了看看我是否在某个地方看到了矩形的边缘,我什么也没看到。但是,如果我将元素硬编码到graphic.component 的模板中,它会在定义的空间内呈现,那么为什么它会显示在视图中,而我注入模板的元素却远离我可以的一侧?没找到?
  • 这个怎么样? stackblitz.com/edit/angular-so-load-svg?file=src/app/… 里面包含你自己的 svg。
  • 好吧,也许我应该更清楚我在我的问题中所做的事情。在 stackblitz 中,您会看到我有一个 graphic-component 文件夹,其中包含一个组件。我显然试图让我的演示对象通过它进行渲染,因为我构建了一种将元素迭代到该组件中的机制。当那里应该有一个&lt;g graphic-component /&gt; 时,你一直把它直接硬编码到&lt;svg&gt; 标签中给我看。
  • 我从属性的数据存储中生成元素代码,以获取我尝试使用[innerHtml]DomSanitizer 注入graphic.componet 模板的结果元素。它显示在控制台中,但不显示在屏幕上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
相关资源
最近更新 更多