全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法

今天用angular写table的时候,遇到了一个问题。在ng-repeat中,含有动态的html,而这些html中含有自定义指令。

因为希望实现一个能够复用的table,所以定义了一个指令myStandTable,指令代码大概如下:

var myCommon = angular.module("myCommon",[]);
myCommon.directive("myStandTable", function () {
 return {
 restrict: "A",
 templateUrl: "app/template/tableTem.html",
 transclude: false,
 replace: true,
 controller: function ($scope,$compile, commonService) {
  // do something... 
 },
 link: function (scope, element, attris) {
 }
 }
});

tableTem.html文件代码如下:

<div>
 <table class="table table-hover table-bordered">
 <thead>
  <tr>
  <th ng-if="tableData.multiSelect">
   <input type="checkbox" id="check-all" ng-model="itemsChecked">
   <label for="check-all" class="fa" ng-class="{'fa-square-o': !itemsChecked, 'fa-check-square-o': itemsChecked }" aria-hidden="true">
   </label>
  </th>
  <th ng-repeat="item in tableData.thead">{{item}}</th>
  </tr>
 </thead>
 <tbody>
  <tr ng-repeat="item in tableData.items" ng-click="selectItem(item)" ng-init="item.selected = false" ng-class="{'selected': item.selected}">
  <td ng-if="tableData.multiSelect">
   <input type="checkbox" id="check_{{$index}}" ng-model="item.selected">
   <label for="check_{{$index}}" class="fa" ng-class="{'fa-square-o': !item.selected, 'fa-check-square-o': item.selected }" aria-hidden="true">
   </label>
  </td>
  <td ng-repeat="name in tableData.theadName">
   {{item[name]}}
   
  </td>
  </tr>
 </tbody>
 </table>
</div>

控制器文件代码如下:

var myBasis = angular.module("myBasis",["myCommon"]);
myBasis.controller("myCtrl", function ($scope) {
 $scope.tableData = {
 multiSelect: false,
 pageSize: [10, 20, 50],
 thead: ["导入时间", "导入名称", "结果", "操作"],
 theadName: ["importDate", "name", "result", "oper"]
 };
});

以上,完成了表格展示数据的功能,可是在表格列里面,经常有对某行数据的操作,而这些操作我们同样需要以html的形式插入到表格里面,并且这些html中,还会有ng-click等之类的指令,或者是自定义的指令。比如:"<a href='javascript:;' ng-click='show(item)'>查看信息</a>"; 这类的html,插入到td中,会以html代码展示出来,并不会转换成html。

在网上查阅了方法后,找到了一个转html的解决办法,增加一个过滤器,如下:

myCommon.filter("trusted", function ($sce) {
 return function (html) {
 if (typeof html == "string") {
  return $sce.trustAsHtml(html);
 }
 return html;
 }
});

然后修改temp文件中的代码:

 <td ng-repeat="name in tableData.theadName">
 <span ng-bind-html="item[name] | trusted"></span>
</td>

通过以上方法,确实可以将html转成正常的结果,可是a标签上的ng-click却没有效果,查看了问题的关键,是这段html并没有经过angular的编译,所以ng-click不起作用,需要手动编译,修改如下:

temp文件代码修改:

 <td ng-repeat="name in tableData.theadName">
 <div compile-bind-expn = "item[name]">
 </div>
 </td>

当item[name] 等于 "<a href='javascript:;' ng-click='show(item)'>查看信息</a>"时,我们需要通过compileBindExpn指令来手动编译,再放到div里面去。指令代码如下:

myCommon.directive("compileBindExpn", function ($compile) {
 return function linkFn(scope, elem, attrs) {
 scope.$watch("::"+attrs.compileBindExpn, function (html) {
  if (html && html.indexOf("<") != -1 && html.indexOf(">") != -1) {
  console.log(1);
  var expnLinker = $compile(html);
  expnLinker(scope, function transclude (clone) {
   elem.empty();
   elem.append(clone);
  });
  } else {
  elem.empty();
  elem.append(html);
  }
 })
 }
});

经过这种解决方法后,终于能够正常展示html代码,且其上的ng-click方法也能正常使用。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# angularjs  # ng  # repeat  # 深入讲解AngularJS中的自定义指令的使用  # 详解AngularJS中自定义指令的使用  # AngularJS创建自定义指令的方法详解  # AngularJS使用自定义指令替代ng-repeat的方法  # Angularjs自定义指令实现三级联动 选择地理位置  # Angularjs使用directive自定义指令实现attribute继承的方法详解  # angularjs 表单密码验证自定义指令实现代码  # AngularJS自定义指令实现面包屑功能完整实例  # AngularJS自定义指令之复制指令实现方法  # 详解angularjs中如何实现控制器和指令之间交互  # AngularJS指令与控制器之间的交互功能示例  # AngularJS实现自定义指令与控制器数据交互的方法示例  # 自定义  # 是在  # 会有  # 看了  # 在此  # 也能  # 这段  # 这类  # 却没有  # 或者是  # 正常使用  # 一个问题  # 转换成  # 会以  # 解决方法  # 解决办法  # 小编  # 给我留言  # 转成  # 其上 


相关文章: 如何获取免费开源的自助建站系统源码?  如何通过.red域名打造高辨识度品牌网站?  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星代理如何优化在线客服效率?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何确保西部建站助手FTP传输的安全性?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何通过cPanel快速搭建网站?  如何选择高性价比服务器搭建个人网站?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何规划企业建站流程的关键步骤?  如何制作算命网站,怎么注册算命网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  c++ stringstream用法详解_c++字符串与数字转换利器  重庆网站制作公司哪家好,重庆中考招生办官方网站?  建站之星代理如何获取技术支持?  建站之星2.7模板快速切换与批量管理功能操作指南  浅谈Javascript中的Label语句  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  网站制作话术技巧,网站推广做的好怎么话术?  建站之星收费标准详解:套餐费用及年费价格表一览  如何通过WDCP绑定主域名及创建子域名站点?  ,sp开头的版面叫什么?  已有域名如何快速搭建专属网站?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何通过远程VPS快速搭建个人网站?  如何使用Golang table-driven基准测试_多组数据测量函数效率  建站之星免费模板:自助建站系统与智能响应式一键生成  建站主机数据库如何配置才能提升网站性能?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  linux top下的 minerd 木马清除方法  大连网站设计制作招聘信息,大连投诉网站有哪些?  定制建站方案优化指南:企业官网开发与建站费用解析  如何通过VPS建站无需域名直接访问?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  购物网站制作公司有哪些,哪个购物网站比较好?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  威客平台建站流程解析:高效搭建教程与设计优化方案  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  个人摄影网站制作流程,摄影爱好者都去什么网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  ,石家庄四十八中学官网?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  实例解析Array和String方法  如何高效配置IIS服务器搭建网站?  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。