0

假设我们进行 API 调用并在 String 中获取一些 HTML DOM。内容以不带角度的 HTML 形式出现,因此我必须首先将其转换为我想要的 Angular,然后将其编译为 Angular。

示例 API 响应:

<div>
...some more html...
<h1>a header</h1>
...some more html...
<a href="somewhere.com" class="a-class" id="a-id">A Link</a>
...some more html...
</div>

我正在对其进行转换以获取所有 Anchors<a href="x"></a>并将它们转换为具有输入和输出的角度组件,这些组件将被注入父容器并一起解析,例如:

<angular-anchor   
  [href]="somewhere.com"
  [innerClass]="thisClasses"
  [innerID]="thisID" 
  [content]="thisContent">
</angular-anchor>

angular-anchor包含一个 click 方法,该方法从这些组件外部但在 angular 内部(来自服务)执行代码。

通过[innerHTML]在父容器中使用,其中转换是由管道完成的,就像:

<parent [innerHTML]="APIResponseHTML | transformAnchorsPipe"></parent>

内部的 Angular 组件不会被加载,整个工作只是由管道转换中包含的 safeHTML 解析的原始 Angular。

为了解决这个问题,我使用了 ng-dynamic 库,但它已经过时并且与 AOT 编译不兼容。尽管如此,我还是设法将它与 JIT 编译一起使用,但这对生产不利,效率也低得多

这种方法的示例,“parentDIV”是一个标准的 HTML 标记:

<parentDIV *dynamicComponent="APIResponseHTML | transformAnchorsPipe; 
    context: {dependency: dependencyName};">
</parentDIV>

context包含新组件内部所需的所有依赖项,例如我在“angular-anchor”中使用的第三个服务

从这一点开始,我阅读了几篇关于Angular ElementsDynamic Components Injector的文档,但我无法在我的应用程序中使用它。

使用我刚才提到的这些方法或任何其他方法来使用 AOT 提供的自定义角度组件有什么好的方法吗?

提前致谢。如果需要,请向我询问更多详细信息。

4

1 回答 1

0

<parent [innerHTML]="APIResponseHTML | transformAnchorsPipe"></parent>parent如果parent是组件,内部 html 不是已知属性

将您的 html 作为字符串传递给parent组件中的任何属性 - 您可以在属性上使用@Input()装饰器来实现 - 您可能对此有所了解

最后尝试将字符串作为内部 html 传递给您的任何div标签parent.component.html- 我希望这将解析您的 html 字符串并将 html 附加到指定的内部div

如果这不起作用 - 尝试html为您的 html 字符串添加编码,然后尝试绑定它 - 希望这将解决您的第一个问题 - 快乐编码:)

于 2018-11-11T18:23:24.213 回答