Angular ng-content 正在丢失换行符。如何保持换行符完好无损?

Posted

技术标签:

【中文标题】Angular ng-content 正在丢失换行符。如何保持换行符完好无损?【英文标题】:Angular ng-content is losing newlines. How can I keep newlines intact? 【发布时间】:2019-03-03 04:13:30 【问题描述】:

我有一个用于显示代码的 Angular 组件,如下所示:

<pre><code>
<ng-content></ng-content>
</code></pre>

我以如下方式使用这个组件:

<app-example-code>
      <![CDATA[
      test
      xyz
      ]]>
</app-example-code>

产生“测试 xyz”。使用时

<pre><code>
test
xyz
</code></pre>

我得到了预期的换行符。

显然 ng-content 似乎失去了换行符。有没有办法强制 ng-content 保留这些换行符?

编辑:按照评论者的建议,我得到了它的使用

<app-example-code><pre>
      <![CDATA[
      test
      xyz
      ]]>
</pre></app-example-code>

我希望能够使用 app-example-code 而无需每次都添加,但我想只要它有效,我就很高兴。

【问题讨论】:

最快的解决方案是将&lt;pre&gt;&lt;code&gt;标签嵌套在&lt;ng-content&gt; 【参考方案1】:

这里发生了两件事。

html

默认情况下,大多数元素会将空格折叠成单个空格字符。如果不是这样,写类似

<p>
  paragraph
</p>

在开始和结束时会有相当多的空白,尤其是在深度嵌套的结构中。

要显示空白,您可以使用 CSS

p  white-space: pre 

角度

另一方面,从版本 6 开始,Angular 默认去除空格。您可以通过配置其元数据来更改每个组件的此选项:

@Component(
  preserveWhitespaces: true,
)

还有do it globally的选项。

【讨论】:

组件属性其实是preserveWhitespaces(末尾有s)。【参考方案2】:

我不认为 Angular 会“丢失”换行符。这就是 HTML 的工作原理。您可以在 CSS 中使用 white-space: pre 来保留换行符(和空格)。

更新:检查 Lazar Ljubenović 的回答,也许它毕竟是 Angular。这只是关于模板中的空白,但如果这个组件用于另一个模板中就会出现这种情况。

【讨论】:

在组件内添加(pre 和/或代码)不起作用。而且我宁愿不必在使用此组件的每个地方都设置该 css 设置。 您应该能够将 css 添加到您的组件中,因此您不必到处添加它。话虽如此 - 检查 Lazar Ljubenović 的回答,因为这表明 Angular 正在剥离你的空白。

以上是关于Angular ng-content 正在丢失换行符。如何保持换行符完好无损?的主要内容,如果未能解决你的问题,请参考以下文章

angular4:ng-content 基于嵌套类的选择

如何在 Angular 2 中编译 ng-content 中的动态模板

将上下文传递给 Angular 2 组件的投影内容(使用 ng-content)

当父组件使用 ng-content Angular 时从子组件访问父组件

Angular - 将输入传递给 ng-content 组件

使用 ng-content 动态创建 angular2 组件