代码之家  ›  专栏  ›  技术社区  ›  eddyP23

角度-如何使角度解析净化的html

  •  0
  • eddyP23  · 技术社区  · 6 年前

    在我的组件模板中,我有如下代码:

      <div [innerHtml]='sanitizedHtml'></div>
    

    在组件声明中:

    let unsafeHtml = '<a routerLink="/some-other-page"> Link </a>';
    this.sanitizedHtml = sanitizer.bypassSecurityTrustHtml(unsafeHtml);
    

    检查呈现页面中的HTML内容,我可以看到生成的DOM,但是当我单击链接时,什么也没有发生。我想,那个角度忽略了 routerLink 却什么也没做。

    有办法解决这个问题吗?

    我可以改变 路由器链接 变得简单 href ,但在后一种情况下,浏览器执行整个页面的重新加载,而我希望在我的应用程序中导航。

    2 回复  |  直到 6 年前
        1
  •  1
  •   mchl18    6 年前

    将HTML放入TS中的字符串是非常糟糕的设计。

    在内部,angularcli在所有文件上运行文件观察程序,但它们后面的作业非常不同。此外,许多实际的输出标记将被操纵,因为angular解析嵌套元素和范围css。它并不总是呈现实际的页面,这在这里是必要的,以发现有一个定向隐藏在一些TS文件中。

    “角度法”基本上禁止你使用 innerHTML 指令。 ng-content 要将html投影到另一个组件中,请执行以下操作:

    component1.ts

    <div class="comp-1">
      <ng-content></ng-content>
    </div>
    

    component2.ts

    <component1>
      <a routerLink="..."></a>
    </component1>
    

    将呈现

    <div class="comp-1">
      <a routerLink="..."></a>
    </div>
    

    但这假设您可以将静态字符串标记转换为组件。然而,我认为唯一的方法是甚至可以不编写自定义预处理器。