AngularJS textarea linebreak /换行符

时间:2014-06-25 15:41:18

标签: angularjs textarea newline line-breaks

我有一个textarea,内容通过ng-model填充:

<textarea data-ng-model="messageBody"></textarea>

messageBody需要使用换行符(\ n)而不是换行符存储在数据库中。但是,当我使用正则表达式将换行符转换为换行符并将其传递给模型时,angular会转义HTML。有没有办法将HTML直接传递给模型或textarea而不进行转换?或者,有没有更好的方法来转换textarea换行符和换行符?

更新

进一步检查时,这不是一个角度问题。我们使用SQL脚本填充数据库(Postgres)。原来插入数据库的字符串没有被转义。由于字符串包含换行符,这意味着它们直接作为文本插入。然后,来自前端的换行处理似乎产生与最初填充的不一致的结果。长话短说 - 我逃脱了初始数据库内容以适应换行符,一切正常。

2 个答案:

答案 0 :(得分:1)

textarea中的新行是结果字符串中的新行(\n)。

fiddle表明了这种行为。

如果要将\n存储在数据库中,则无需执行任何操作,该字符串已具有该格式。

如果通过&#39; linebreak&#39;,你的意思是<br>标签,而你实际上意味着该字符串来自包含此类标签的数据库,那么您应该事先将其替换为我想的。

理想情况下,您的数据库应包含换行符(\n),您应该保存并从中获取换行符,不进行转换。

答案 1 :(得分:1)

是的,您可以使用&#34; SCE / Strict Contextual Escaping&#34;在AngularJS中执行此操作。继续将换行符转换为换行符并将其传递给模型。

然后,当您在模板中显示数据时,可以使用$sce.trustAsHtml()保留HTML内容,然后使用ng-bind-html指令将其绑定到DOM。以下是它在控制器中的显示方式示例:

myApp.controller( 'contentCtrl', [ '$scope', '$sce', function( $scope, $sce ){
  $scope.messageBody = $sce.trustAsHtml( 'Hello <br> World' );
}]);

然后在你的模板中,像这样绑定它:

<div ng-bind-html="messageBody"></div>

$sce

中{{1}}的更多信息