AngularJS中输出变量使用{{}}花括号或者ng-bind命令,在进行数据绑定时默认是以文本的形式输出,如果变量中有HTML标签的话,默认是不转义的,直接以标签的形式显示,这样防止了XSS脚本注入攻击。XSS攻击指的是通过对网页注入可执行客户端代码且成功地被浏览器执行,来达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可能会获取到用户的一些敏感信息、改变用户的体验、诱导用户等非法行为。

AngularJS提供了ng-bind-html指令来动态绑定HTML文本,angular默认是不相信绑定的HTML文本的,对于绑定的HTML文本,必须利用$sce.trustAsHtml()方法告诉angular是可信的HTML文本,否则会报$sce:unsafe异常错误。

下面是一个绑定简单HTML文本的方法

1、引入angular-sanitize模块

var demo = angular.module('demoApp', ['ngSanitize'])

2、控制器

demo.controller('DemoCtrl', ['$scope', 'DemoService', function ($scope, DemoService) {$scope.content = '<p>这是一段HTML文本</p>';
}

3、视图

<section ng-controller="DemoCtrl"><div ng-bind-html="content | htmlTrusted"></div>
</section>

4、过滤器htmlTrusted,$sce是angularJS自带的安全处理模块$sce,trustAsHtml方法便是将数据内容以html的形式进行解析并返回

demo.filter('htmlTrusted', function ($sce) {return function (html) {return $sce.trustAsHtml(html)}});

对于简单的HTML文本,就可以解决了。但是对于复杂的HTML片段,复杂是指HTML片段带有angular表达式或指令,ngBindHhtml将不会解析。ngBindHhtml不会和$scope关联双向绑定,如果在HTML中存在ngClick、ngHref、ngSHow、ngHide等angular指令,它们并不会被compile,点击这些按钮,也不会发生任何反应,绑定的表达式也不会在更新。

在angular中的所有指令要生效,都需要经过compile,大部分情况下compile,是会在angular启动时,自动compile的,但如果是对于动态添加的模板,则需要手动的compile,我们可以采用angular的$compile服务实现这一功能。

<div html-dynamic="content">
  demo.directive('htmlDynamic', function ($compile) {return {restrict: 'A',replace: true,link: function (scope, ele, attrs) {scope.$watch('isDomComplete', function (val) {if (val) {scope.$watch(attrs.htmlDynamic, function(html) {ele.html(html);$compile(ele.contents())(scope);});}});}};});

这里创建了一个html-dynamic指令,它会监听绑定属性html值的变化,当html内容存在的时候,利用$compile服务来动态给当前的作用域传入html,并替换掉当前DOM节点。这样HTML片段中的表达式或指令就生效了,希望本文为大家了解AngularJS有所帮助。

Angular动态绑定HTML文本相关推荐

  1. Angular中数据文本绑定、绑定Html、绑定属性、双向数据绑定的实现方式

    场景 Angular介绍.安装Angular Cli.创建Angular项目入门教程: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  2. angular封装富文本编辑器指令

    这个富文本编辑器的基本用法可以去该编辑器作者的github看下 (https://github.com/echosoar/medit) html代码和css 原版: 改版的: /*富文本编辑器*/#m ...

  3. Angular 2.0 文本拖拽

    基于Angular7.1和TypeScript实现 Html代码 <div style="padding-left: 0px;"><div id='content ...

  4. slate-angular 正式开源

    本文由智能化研发管理工具PingCode前端工程师 杨振兴 分享 一句话介绍 slate-angular 是一个基于 Angular 和 Slate.js 的编辑器视图层,帮助开发者使用 Angula ...

  5. 前端知识总结汇总!(HTML、CSS、JS、jQuery、vue、微信小程序)

    前端知识总结汇总!(HTML.CSS.JS.jQuery.vue.微信小程序) 前端理论考核题 1 / HTML 1.DOCTYPE 的作用是什么?标准模式与兼容模式各有什么区别? !DOCTYPE是 ...

  6. svelte 学习记录(一)

    svtelte 是一款更小.更轻量的框架,比现在的三大框架都更轻量,但是应用不广泛.之中的利弊可以移步知乎等论坛 https://www.zhihu.com/question/53150351 Hel ...

  7. vue面试题(day06)

    文章目录 前言 请谈谈WXML与标准的html的异同? 请谈谈WXSS和CSS的异同? 请谈谈微信小程序主要目录和文件的作用? 请谈谈小程序的双向绑定和vue的异同? 简单描述下微信小程序的相关文件类 ...

  8. 小程序全面基础知识归纳

    一.基础要点 1.文件结构 1-1 page.json全局配置 | 微信开放文档 app.json 是当前小程序的全局配置,包括了小程序的所有页面路径.界面表现.网络超时时间.底部tab等.普通快速启 ...

  9. android 富文本编辑器_富文本编辑器,还是Tinymce好一点?Angular/Vue集成最新版

    以前jQuery.PC网页时代,富文本编辑器一直就是百度Ueditor.KindEditor.现在使用Angular.Vue.React等MVVM架构以及最新的大前端 工程模式下,老的编辑器显然不更新 ...

最新文章

  1. Linux下cat命令各种用法
  2. oracle查看用户路径,oracle 查看用户的表空间,表空间路径,角色,权限
  3. java去掉mongodb日志_MongoDB日志文件过大的解决方法 清理
  4. java 同步 实例_Java 1.4同步:仅允许方法的一个实例运行(非...
  5. 《南溪的目标检测学习笔记》——目标检测的评价指标(mAP)
  6. 归并排序MergeSort
  7. 学习ARM64页表转换流程
  8. 2019最新java实战项目资料
  9. linux交叉编译 i2c-tools
  10. uint8_t / uint16_t / uint32_t /uint64_t 这些数据类型是什么?
  11. Unity插件——文字转朗读语音RtVioce插件功能/用法/下载
  12. EBUSY: resource busy or locked, symlink
  13. (论文阅读)实例分割之PolarMask
  14. 微信公众号--发送模板消息
  15. mysql字段中有问号_Mysql数据库,表中有中文时,select出来好多问号(?)的解决方法...
  16. android sd卡数据恢复,手机sd卡受损怎么办 手机内存卡数据恢复方法【详解】
  17. chrome设置android,在Android上从Chrome上打开位置设置活动
  18. 应对羊毛党的老手段不管用了,但有些公司依然有办法,他们是怎么做的?
  19. 北风修仙笔记—2020年5月
  20. Linux 详解socket实现与网络编程接口

热门文章

  1. PD协议芯片TYPE C接口支持快充诱骗
  2. 病毒HEUR:Trojan-Downloader.Win32.Generic
  3. uni-app实战之社区交友APP(5)搜索和发布页开发
  4. 全国大学生“高教杯“成图大赛:关于齿轮的快速建模研究
  5. k8s——pv(静态+动态storageclass)与pvc
  6. 网络图片缩略图查看工具
  7. Ubuntu、Windows双系统下NTFS分区的读写问题
  8. 终结HashMap面试?我是谁?我在哪
  9. 知乎微信小程序广告真的猛的一塌糊涂
  10. linux统计单拷贝基因家族,基因家族收缩和扩张分析