【问题标题】:AngularJS 1.2's ngBindHtml doesn't process /r & /nAngularJS 1.2 的 ngBindHtml 不处理 /r & /n
【发布时间】:2013-11-03 09:22:22
【问题描述】:

我有一个看起来像这样的字符串(很多空格,这就是它在我的服务器上出现的方式):

 var care_description = "MATERIAL\r\n    \r\n  56% Acrylic, 24% Rayon, 20% Polyester\r\n \r\n  CARE\r\n  \r\n  Machine Wash, Gentle Or Delicate"

我正在使用新的Angular 1.2.0ngBindHtml 并在我的控制器中处理它,如下所示:

    $scope.care = $sce.trustAsHtml(care_description);

$scope.records[i].accordions 数组只是 Angular-Bootstrap 的 Accordions 模块的包装器)。

当我把它放到我的视图中时(通过一个简单的<p ng-bind-html="care"></p>),它会呈现如下:

 MATERIAL 56% Acrylic, 24% Rayon, 20% Polyester CARE Machine Wash, Gentle Or Delicate

什么时候应该:

MATERIAL

56% Acrylic, 24% Rayon, 20% Polyester 

CARE 

Machine Wash, Gentle Or Delicate

对我来说,这里唯一的解决方案是进行正则表达式替换以查找 \r\n 的所有实例并用 <br /> 替换它们吗?

编辑:我应该提到,虽然上面的示例中没有HTML 标签,但通常会有,所以我需要在这里使用ngBindHtml 而不是<pre> 标签。

【问题讨论】:

    标签: javascript angularjs ng-bind-html


    【解决方案1】:

    ngBindHtml 所做的并不是转义标签。你在这里没有标签。您可以将所有\r\n 替换为<br/>。或者你可以写一个指令来为你做这件事。或者只使用<pre> 标签。

    【讨论】:

      【解决方案2】:

      你所拥有的不是 HTML,而是纯文本。所以你不应该使用 ng-bind-html 和 trustAsHtml。只需在 <pre> 块内显示值:

      <pre>{{ care }}</pre>
      

      【讨论】:

      • 抱歉,请参阅上面的编辑 - 虽然在此示例中没有 HTML 标签,但通常会有一些标签,所以我必须使用 ngBindHtml
      • 那么您似乎遇到了设计问题:要么值是 HTML,换行符也应该是 HTML,要么是纯文本,不应该包含 HTML。我会修复数据,以及生成这些数据的过程,而不是不得不到处处理这种不一致。
      • 使用Cheerio(相当于jQuery的节点)从网站上抓取数据以简单地抓取一个元素并获取.html()。那么,您是否建议在数据收集阶段进行搜索替换,将/r/n 转换为换行 HTML 元素,以便所有内容保持一致?
      • 是的,这就是我的建议。但我仍然想知道为什么 Cheerio 没有在数据中返回&lt;br/&gt;。它们是否存在于原始的、被抓取的网站上?如果不是,那么被抓取的站点如何显示带有换行符的数据?
      • 所以,如果我理解正确的话,Cheerio 的 html 函数不能正常工作。我会解决这个问题,或者解决它以确保数据从一开始就正确,而不是每次必须显示数据时都尝试处理错误。
      猜你喜欢
      • 1970-01-01
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多