【发布时间】:2020-04-29 14:02:00
【问题描述】:
在组件代码中,我有一个名为 taggy 的字段,其中包含一个完整的锚标记。起初,在我的 HTML 中,我将它渲染到屏幕上,这当然没有成功,因为我只在逐字版本中看到了 taggy 的内容。文字字面意思是hazaa。
谷歌搜索一下,我发现了我的错误。我应该使用innerHTML。它可以工作,但会导致浏览器重新加载,因为我们使用的是 href 而不是 routerLink。当然,我更改了 taggy 的值,所以它显示的是 routerLink 而不是 href。但是,当我这样做时,它会起作用但并不完全。在我的 HTML 中,我有以下内容。
{{taggy}}
<div [innerHTML]=taggy></div>
<div innerHTML=taggy></div>
这些都不会产生有效的链接。最接近的是中间的,因为它创建了一个 div 并在其中创建了一个锚点。但是,锚标记上没有属性,它只包含用户应该阅读的文本。路由信息没了。
怎么办?
我找到了a suggestion,但感觉不是一个好方法(即使作者表示这不是最好的方法)。还有this,但与我的情况无关,因为我将字符串传递给另一个组件。
【问题讨论】:
-
这似乎违背了 Angular 的做法。您不应该以这种方式直接操作 DOM。您是否有理由不只是在模板中添加标签并绑定到其
href? -
@WillAlexander 是的,有。我有一个带有 @Input() 页脚:字符串 的组件。在那个页脚中,我希望能够显示一些信息。有时,该信息将包含一个链接。由于传递的数据是一个字符串,我无法再指定任何内容,因此我需要将内容发送到 innerHTML,正如我在问题中提到的那样,它确实有效。问题是当我使用 href 时,页面将在单击页脚时重新加载,而我想成为路由器以避免重新加载。因此,我改为通过 routerLink 。这并没有被渲染。对替代方法有建议吗?
-
@WillAlexander 顺便说一句,我完全同意你的说法。我很高兴接受有关如何以 Angular 方式处理我的事情的教育。
-
您需要从作为
@Input传递的字符串中提取所需的数据。怎么做取决于你自己,但你绝对不能 100% 传递纯 HTML,尤其是如果它来自用户。 -
@WillAlexander 我不确定您的评论是否有用。我的问题的重点是如何实现你所说的。如果您不知道如何在 Angular 中做到这一点,我完全理解。让我们看看其他人是否提供了一些有用的东西并从中学习。编码愉快。
标签: html angular routing anchor innerhtml