我有一个textarea,内容通过ng-model填充:
<textarea data-ng-model="messageBody"></textarea>
messageBody需要使用换行符(\ n)而不是换行符存储在数据库中。但是,当我使用正则表达式将换行符转换为换行符并将其传递给模型时,angular会转义HTML。有没有办法将HTML直接传递给模型或textarea而不进行转换?或者,有没有更好的方法来转换textarea换行符和换行符?
更新
进一步检查时,这不是一个角度问题。我们使用SQL脚本填充数据库(Postgres)。原来插入数据库的字符串没有被转义。由于字符串包含换行符,这意味着它们直接作为文本插入。然后,来自前端的换行处理似乎产生与最初填充的不一致的结果。长话短说 - 我逃脱了初始数据库内容以适应换行符,一切正常。
答案 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