在本文中,您将会了解到关于如何使AngularJS输出转义HTML的新资讯,同时我们还将为您解释angularjsinput的相关在本文中,我们将带你探索如何使AngularJS输出转义HTML的奥秘
在本文中,您将会了解到关于如何使AngularJS输出转义HTML的新资讯,同时我们还将为您解释angularjs input的相关在本文中,我们将带你探索如何使AngularJS输出转义HTML的奥秘,分析angularjs input的特点,并给出一些关于Angular.js数据绑定时自动转义html标签及内容、AngularJS HTML编译器介绍_AngularJS、angularjs – Angular JS – 如何处理重复的HTML代码,如页眉/页脚?、angularjs – Angular.js $compile返回html数组但不返回实际的html的实用技巧。
本文目录一览:- 如何使AngularJS输出转义HTML(angularjs input)
- Angular.js数据绑定时自动转义html标签及内容
- AngularJS HTML编译器介绍_AngularJS
- angularjs – Angular JS – 如何处理重复的HTML代码,如页眉/页脚?
- angularjs – Angular.js $compile返回html数组但不返回实际的html
如何使AngularJS输出转义HTML(angularjs input)
我从服务器获取JSON数据,其中一个字段包含转义的html(实际上是电子邮件正文):
<html>\r\n<head>\r\n<meta http-equiv="Content-Type"content="text/html;charset=iso-8859-1">\r\n</head>\r\n<bodydir="auto">\r\n<div>Buonasera, ho verificato i dati sul mioaccount ed il numero di cell che vi hofornito</div>\r\n<div><br>\r\n<a
(更多…)
我为尝试使用AngularJs渲染而疯狂。
以下内容不起作用:
<div ng-bind-html-unsafe="mail.htmlbody"></div>
我认为这是正常的,因为html实际上已经转义了。我应该先取消转义吗?Angular是否可以通过某些可用服务转义html?
如果我这样使用$ sce:
scope.mail.htmlbody = $sce.trustAsHtml(scope.mail.htmlbody);
显示源html,检查元素可以看到引用的内容。换句话说,在页面中将显示源html,而不是呈现html。也许我缺少什么?
答案1
小编典典同时$sce
引入了服务(角度1.2),ng-bind-html-unsafe
放弃了对指令的支持。新指令为ng-bind-html
。如果使用此代码,则代码应按文档所述工作:
<div ng-bind-html="mail.htmlbody"></div>
Angular.js数据绑定时自动转义html标签及内容
angularJS在进行数据绑定时默认是以字符串的形式数据,也就是对你数据中的html标签不进行转义照单全收,这样提高了安全性,防止html标签的注入攻击,但有时候需要,特别是从数据库读取带格式的文本时,无法正常的显示在页面中。
而要对html进行转义,则需要在数据绑定的html标签中使用ng-bind-html属性,该属性依赖与$sanitize,也就是需要引入angular-sanitize.js文件,并在module定义时注入该服务ngSanitize。比如:
html:
<span ng-controller = "myCtr" ng-bind-html = "htmlStr"></span>
javascript:
function myCtr($scope){
$scope.htmlStr = '<p></p>';
};
这样可以实现html转义,但是有个问题是style这种标签会被angularJS认为是不安全的所以统统自动过滤掉,而为了保留这些就需要开启非安全模式。
如何让自动加载的数据转义html标签呢?实际上还有一种绑定方式:
html:
<div ng-repeat = "article in articles">
<divhttps://www.jb51.cc/tag/heading/" target="_blank">heading">
<h4><b>{{article.title}}</b></h4>
</div>
<div>
<article ng-bind-html="article.content | trustHtml">
</article>
</div>
</div>
javascript:
success(function(data){
$scope.articles = data;
});
myApp.filter('trustHtml',function($sce){
return function(input){
return $sce.trustAsHtml(input);
}
});
其中$sce是angularJS自带的安全处理模块,$sce.trustAsHtml(input)方法便是将数据内容以html的形式进行解析并返回。将此过滤器添加到ng-bind-html所绑定的数据中,便实现了在数据加载时对与html标签的自动转义。
AngularJS HTML编译器介绍_AngularJS
概览
AngularJS的HTML编译器能让浏览器识别新的HTML语法。它能让你将行为关联到HTML元素或者属性上,甚至能让你创造具有自定义行为的新元素。AngularJS称这种行为扩展为“指令”
HTML在编写静态页面时,有很多声明式的结构来控制格式。比如你要把某个内容居中,你不必告诉浏览器“去找到窗口的中点位置,然后跟内容的中间结合”。你只需要添加一个 align="center" 的属性给需要内容居中的元素就行了。这就是声明式语言的强大之处。
但是声明式语言也有力所不能及的地方,原因之一在于你不能用它来让浏览器识别新的语法。比如说,你不要内容居中,而是居左到1/3,这时它就做不到了。所以我们需要一个办法让浏览器能学会新的HTML语法。
AngularJS生来自带一些对创建APP非常有用的指令。我们也希望你能自己创造一些对你自己的应用有用的指令。这些扩展的指令就是你创建APP的 “特定领域语言(Domain Specific Language)”。
立即学习“前端免费学习笔记(深入)”;
编译的过程都会在浏览器端发生;服务器端不会参与到其中的任何步骤,也不会做预编译。
编译器(complier)
编译器是AngularJS提供的一项服务,它通过遍历DOM来查找和它相关的属性。整个编译的过程分为两个阶段。
1.编译: 遍历DOM并且收集所有的相关指令,生成一个链接函数。
2.链接: 给指令绑定一个作用域,生成一个动态的视图。作用域模型的任何改变都会反映到视图上,并且视图上的任何用户操作也都会反映到作用域模型。这使得作用域模型成为你的业务逻辑里唯一要关心的东西。
有一些指令,比如ng-repeat会为数据集合里的每一项DOM元素都克隆一次。将整个编译过程分为编译和链接两个阶段的作法改善了整体的性能,因为克隆出来的模板总共只需要被编译一次,然后链接到各自的模型实例上就行了。
指令
指令指示的是“当关联的HTML结构进入编译阶段时应该执行的操作”。指令可以写在元素的名称里,属性里,css类名里,注释里。下面有几个功能相同的使用ng-bind指令的例子。
指令本质上只是一个当编译器编译到相关DOM时需要执行的函数。你可以在指令API文档中找到更详尽的关于指令的资料。
下面是一条能让元素变得可拖拽的指令。注意元素里的那个draggable属性。
index.html:
Drag ME