一、问题

默认情况下,angularJS绑定的数据为字符串文本,不会对其中包含的html标签进行转义生成格式化的文本。在实际工作时碰到接口返回的数据带有html格式时该如何处理。

二、解决办法
1、引入angular-sanitize.js文件,并在module定义时注入服务ngSanitize。(为了能使用ng-bind-html属性) var myApp = angular.module('myApp', ['ngAnimate']) 2、创建一个filter myApp.filter('trustHtml', function ($sce) {
return function (input) {
return $sce.trustAsHtml(input);
}
});
//$sce是angularJS自带的安全处理模块,$sce.trustAsHtml(input)方法便是将数据内容以html的形式进行解析并返回。 3、将此过滤器添加到ng-bind-html所绑定的数据中,便实现了在数据加载时对于html标签的自动转义。 <div ng-repeat="item in list" >
<div ng-bind-html="item.content |trustHtml"></div>
</div> 三、其他
本来到此,问题已经解决了。但是在实际运用中发现了另外一个小坑。某数据只在前端创建,在textarea里编辑完并保存后,从数据库里读出来的格式与创建时不一致。
后来发现是由于textarea里的换行是\n指令控制,上传数据即为\n格式,读到html里后,需要把\n转换为<br>,解决的办法依旧采用filter。 app.filter('ntobr', function(){
var filter = function(input){
return input.replace(/\n/g,"<\/br>").replace(/ /g,"&nbsp;");
};
return filter;
});
//此过滤器将textarea里的\n和空格替换为html可以识别的标签 <div ng-repeat="item in list" >
<div ng-bind-html="item.content | ntobr |trustHtml"></div>
</div>
//在绑定数据时只需要同时加入两个过滤器即可
四、也可以不转义\n 为<br>标签;
使用pre标签就可以显示 \n 的换行;功能;
<div ng-repeat="item in list" >
<pre ng-bind="item.content ></pre>
</div>
<pre>标签会超出文本框的内容;
解决方法;强制换行;
<pre style="white-space: pre-wrap;  word-wrap: break-word;"></span>
或者超出部分隐藏;overflow:hidden;

angularJS绑定数据中对标签转义的处理二 与pre标签的使用的更多相关文章

  1. angularJS绑定数据中对标签转义的处理

    一.问题 默认情况下,angularJS绑定的数据为字符串文本,不会对其中包含的html标签进行转义生成格式化的文本.在实际工作时碰到接口返回的数据带有html格式时该如何处理. 二.解决办法 1.引 ...

  2. 关于angularJS绑定数据时自动转义html标签

    关于angularJS绑定数据时自动转义html标签 angularJS在进行数据绑定时默认是会以文本的形式输出,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止了html标签 ...

  3. angularJS绑定数据时自动转义html标签

    angularJS在进行数据绑定时默认是会以文本的形式输出,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止了html标签中的注入攻击,但有些时候还是需要的,特别是从数据库读取 ...

  4. AngularJS绑定数据

    绑定数据总共有三种方式1.{{}}最常用2.ngbind3.ng-model 主要用在input标签

  5. AngularJS之指令中controller与link(十二)

    前言 在指令中存在controller和link属性,对这二者心生有点疑问,于是找了资料学习下. 话题 首先我们来看看代码再来分析分析. 第一次尝试 页面: <custom-directive& ...

  6. D3.js 选择元素和绑定数据/使用数据

    选择元素和绑定数据是 D3 最基础的内容,本文将对其进行一个简单的介绍. 一.如何选择元素 在 D3 中,用于选择元素的函数有两个: d3.select():是选择所有指定元素的第一个 d3.sele ...

  7. HTML中pre标签的用法

    我们经常会在要保持文本格式的时候使用pre标签,比如当我们要展示源代码的时候,只要放一个pre标签,然后把源代码直接复制,粘贴,然后在页面上就可以保持好格式.不会像放在其它标签里那样,把换行和空格都自 ...

  8. 聊一聊HTML <pre>标签

    聊一聊HTML <pre>标签 我们经常会在要保持文本格式的时候使用pre标签,比如当我们要展示源代码的时候,只要放一个pre标签,然后把源代码直接复制,粘贴,然后在页面上就可以保持好格式 ...

  9. 从零开始学习html(二)认识标签(第一部分)——下

    八.<blockquote>标签,长文本引用 <!DOCTYPE HTML> <html> <head> <meta http-equiv=&qu ...

随机推荐

  1. Class.forName和registerDriver的区别

    我们都知道JDBC的代码怎么写,比如以MySQL JDBC为例 //注册JDBC驱动 Class.forName("com.mysql.jdbc.Driver"); //然后就可以 ...

  2. 实现 1像素border

    border-1px($color) position: relative &:after display: block position: absolute left: 0 bottom: ...

  3. VS2015 正式版中为什么没有了函数前面引用提示了?

    HttpClient _httpClient = new HttpClient(); var clientId = Config.GetValue("AuthUser"); var ...

  4. oracle 快速备份表数据

      oracle 快速备份表数据 CreateTime--2018年2月28日17:04:50 Author:Marydon UpdateTime--2017年1月20日11:45:07 1.1.9. ...

  5. 谷歌浏览器禁止window.close的问题

    当一个窗口不是通过window.open或者window.showModalDialog打开的时候,调用JS的window.close() 谷歌浏览器会提示如下警告,并拒绝执行 Scripts may ...

  6. demo02

    class PhoneNumber(): def __init__(self,number): self.a=number[1:4] self.b=number[6:9] self.c=number[ ...

  7. [SceneKit] 不会 Unity3D 的另一种选择

    概述 SceneKit和SpriteKit的区别简单的来说就是二维和三维的区别 详细 代码下载:http://www.demodashi.com/demo/10664.html 上周一, 相信很多人和 ...

  8. 在阿里云上进行Docker集群的自动弹性伸缩

    摘要: 在刚刚结束的云栖大会上,阿里云容器服务演示了容器的自动弹性伸缩,能够从容应对互联网应用的峰值流量.阿里云容器服务不仅支持容器级别的自动弹性伸缩,也支持集群节点级别的自动弹性伸缩.从而真正做到从 ...

  9. hibernate4无法保存数据

    hibernate4无法保存数据 author: hiu 以后都发文章我都备注一下作者了,hiu就是我了 红色字体更新日期:2014-07-08 初次使用hibernate4,使用getCurrent ...

  10. Linux查看GPU信息和使用情况

    Linux查看显卡信息: lspci | grep -i vga 使用nvidia GPU可以: lspci | grep -i nvidia [root@gpu-server-002 ~]# lsp ...