在 HTML 字符串中保留换行符

问题描述 投票:0回答:5

使用 Angular 5 和 Firebase,我正在存储和检索电影评论信息。创建和编辑评论时,会保留换行符(我假设使用 ngModel 与此有关)。然而,当从读者的角度检索评论时,

ReviewComponent
,换行符不会保留。记录主体仍然显示换行符,并使用 Angular 的
json
管道显示为
text\n\ntext
显示换行符应该在的位置。

这是我的 HTML:

<main role="main" class="container">
  <p style="margin-bottom: 2rem;">{{review.body}}</p>
</main>

我也尝试过

span
body

如何在读者的评论中保留这些换行符?

html angular firebase firebase-realtime-database
5个回答
55
投票

HTML 通常使用

br
标签来表示新行。普通的
textarea
标签不使用此功能,它使用用户系统使用的任何内容来表示新行。这可能因操作系统而异。

最简单的解决方案是使用 CSS

<main role="main" class="container">
  <p style="margin-bottom: 2rem;white-space:pre-wrap;">{{review.body}}</p>
</main>

这将保留任何“空白”格式,包括额外的空格。

如果您想实际用

br
标签替换换行符,您可以使用以下正则表达式

<main role="main" class="container">
  <p style="margin-bottom: 2rem;" [innerHTML]="review.body.replace(/(?:\r\n|\r|\n)/g, '<br>')"></p>
</main>

编辑 感谢 ConnorsFan 对替换不适用于插值的提醒。


27
投票

通过使用

[innerText]
指令,空白似乎得以保留,以及
\n
新行

例如

<small style="display:block" [innerText]="review.body"></small>


7
投票

我也遇到过类似的情况,我有这样的 HTML 代码:

<div>{{msgTitle}}</div>

我尝试将

'\r\n'
&lt;br&gt;
都放入字符串
msgTitle
中,但是它们都没有在页面上显示的文本中添加换行符。这个链接给了我解决方案:

https://github.com/angular/angular/issues/7781

使用

[innerHTML]="msgTitle"
代替
{{msgTitle}}


0
投票

这适用于我的

<i>
标签。

<i style="display: block" [innerHTML]="review.body"></i>

-5
投票

尝试跨度,但这样设置:

span 
{ 
    display : table;
}

应该有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.