javascript - 如何将 html 字符串解析为原生 Angular 模板
问题描述
目前,在绕过用于呈现内容的角度清理机制后,我正在使用 innerHtml 属性呈现 html 字符串。但无法将事件处理程序映射到角度组件中的函数。
例如,html 字符串将包含一个如下所示的按钮
<button (click)="callme()">Click</button>
callme 函数将成为角度组件文件的一部分。我希望这个点击事件在角度函数中处理。
是否可以将此字符串解析为 html dom 并处理角度组件中的事件。
描述此场景并使用角度 cdk 门户的示例代码。 https://stackblitz.com/edit/angular-upaudh?file=src%2Fapp%2Fcdk-portal-overview-example.ts
解决方案
有两种方法可以实现它,这取决于你想要什么。
- 简单的方法是像这样使用innerHtml输入:
HTML
<div [innerHTML]="htmlStr"></div>
TS
htmlStr: 'Hello';
- 如果您想创建一个在构建时将转换为 HTML 的动态模板。然后你必须使用Portals。
PS:在您的示例中(在评论中),您使用[innerHtml]
并尝试将其绑定到 Portal 中。同样[innerHtml]
不会在运行时之前被翻译,因此您的点击事件将与您的组件不在同一范围内。你问的是 github 中的公开对话: Issue。现在,您可以使用上述替代方案来解决您的问题。您可以使用innerHtml
, 然后使用 renderer2 或本机元素引用将点击事件绑定到您的函数,在它们呈现在视图上之后。
推荐阅读
- node.js - 具有多个 git 依赖项的纱线安装导致“EINVAL:无效参数,mkdir ...”错误
- android - 如何在android动态交付中执行错误代码“INCOMPATIBLE_WITH_EXISTING_SESSION”的失败状态?
- python - Pandas loc 给了我 keyerror,索引是日期
- javascript - 如何避免使用动态创建的元素多次循环 - 纯 Javascript
- kotlin - 如何在 Kotlin 的 if 语句中调用全局变量
- python - 在 numpy 数组中的多个索引上设置值
- css - Sass 错误,未找到要读取的文件或无法读取,scss 导入有问题
- php - Laravel 7 - 按 DESC 排序的分页
- c++ - 使用 union 来推迟成员变量的构造
- flutter - 如何在颤动中显示文本字段可见性单击警报对话框按钮