• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法

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

作者:脸别再大了 字体:[增加 减小] 来源:互联网 时间:2017-05-11

脸别再大了通过本文主要向大家介绍了angularjs自定义指令,angularjs指令,angularjs内置指令,angularjs常用指令,angularjs指令大全等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

今天用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) {
 }
 }
});
</div>

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>
</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"]
 };
});
</div>

以上,完成了表格展示数据的功能,可是在表格列里面,经常有对某行数据的操作,而这些操作我们同样需要以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;
 }
});
</div>

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

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

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

temp文件代码修改:

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

当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);
  }
 })
 }
});
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • angularjs指令之绑定策略(@、=、&)
  • 详解angularJs指令的3种绑定策略
  • Angularjs 动态添加指令并绑定事件的方法
  • 详解Angularjs 如何自定义Img的ng-load 事件
  • Angularjs自定义指令实现三级联动 选择地理位置
  • angularJS 指令封装回到顶部示例详解
  • AngularJS的ng-repeat指令与scope继承关系实例详解
  • AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
  • AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
  • AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法

相关文章

  • 2017-05-11vuejs绑定class和style样式
  • 2017-05-11jQuery简单实现遍历单选框的方法
  • 2017-05-11微信小程序 chooseImage选择图片或者拍照
  • 2017-05-11js实现倒计时效果(小于10补零)
  • 2017-05-11详谈jQuery unbind 删除绑定事件 / 移除标签方法
  • 2017-05-11jQuery弹出窗口简单实现代码
  • 2017-05-11JQuery validate 验证一个单独的表单元素实例
  • 2017-05-11js简单实现网页换肤功能
  • 2017-05-11canvas 绘制圆形时钟
  • 2017-05-11Zepto实现密码的隐藏/显示

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Javascript Event(事件)的传播与冒泡
    • nodejs和C语言插入mysql数据库乱码问题的解决方法
    • Webpack中css-loader和less-loader的使用教程
    • 微信小程序中多个页面传参通信的学习与实践
    • JS实现异步上传压缩图片
    • js 性能优化之算法和流程控制
    • javascript设计模式之模块模式学习笔记
    • apicloud简单封装ajax
    • jQuery点击导航栏选中更换样式的实现代码
    • JS检测数组类型的方法小结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有