ng repeat 拼接html,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文件代码如下:

{{item}}

{{item[name]}}

控制器文件代码如下:

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等之类的指令,或者是自定义的指令。比如:"查看信息"; 这类的html,插入到td中,会以html代码展示出来,并不会转换成html。

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

myCommon.filter("trusted", function ($sce) {

return function (html) {

if (typeof html == "string") {

return $sce.trustAsHtml(html);

}

return html;

}

});

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

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

temp文件代码修改:

当item[name] 等于 "查看信息"时,我们需要通过compileBindExpn指令来手动编译,再放到div里面去。指令代码如下:

myCommon.directive("compileBindExpn", function ($compile) {

return function linkFn(scope, elem, attrs) {

scope.$watch("::"+attrs.compileBindExpn, function (html) {

if (html && 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方法也能正常使用。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值