最近在使用angularjs做一个列表展示的功能,突然发现自定义行的内容里不能包含html标签。于是翻阅了一些资料和API找到了解决的办法。
- 首先我们看下面一段代码
1 | <table data-ng-controller="ListController"> |
- 这里item对象的content属性里包含 html标签,例如 item.content=”我是内容”,如果出现这样的内容,不做任何处理的情况下页面会报错,导致内容无法显示,这是因为 angularjs的安全机制 引起的,angularjs渲染时不允许片段里包含html元素,如果需要加入自定义的html片段,需要调用它内部的服务$sce里的trustAsHtml方法来过滤既然angularjs 为我们提供了这个方法,于是我们稍微改写下前端的html,变成下面这样:
1 | <table data-ng-controller="ListController"> |
- 接着我们在ListController里定义一个getContentHtml 方法来处理 这段文本内容。ListController 里需要引入$sce 服务
1 | function ListController($sce,$scope) |
- 以上是一种解决方案,那其实还有一种处理方案,也是通过$sce.trustAsHtml,但我们将其写在过滤器中,这样就可以避免多个controller里都要写相应的处理方法,但有些页面的业务逻辑比较复杂,还是得单独写在自己的controller里,依情况而定!为指定的模块 创建过滤器,例如我们为 app.controllers 创建了一个名叫 to_trusted 的过滤器
1 | angular.module('app.controllers', []) |
- 前端页面的处理将会更加简洁,我们稍作修改变成如下:
1 | <table data-ng-controller="ListController"> |
这样,angularjs渲染的时候过滤器会自动去处理这段Html。