AngularJs中 ng-repeat指令中實現(xiàn)含有自定義指令的動態(tài)html的方法
今天用angular寫table的時候,遇到了一個問題。在ng-repeat中,含有動態(tài)的html,而這些html中含有自定義指令。
因為希望實現(xiàn)一個能夠復用的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: ["導入時間", "導入名稱", "結(jié)果", "操作"],
theadName: ["importDate", "name", "result", "oper"]
};
});
以上,完成了表格展示數(shù)據(jù)的功能,可是在表格列里面,經(jīng)常有對某行數(shù)據(jù)的操作,而這些操作我們同樣需要以html的形式插入到表格里面,并且這些html中,還會有ng-click等之類的指令,或者是自定義的指令。比如:"<a href='javascript:;' ng-click='show(item)'>查看信息</a>"; 這類的html,插入到td中,會以html代碼展示出來,并不會轉(zhuǎn)換成html。
在網(wǎng)上查閱了方法后,找到了一個轉(zhuǎn)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轉(zhuǎn)成正常的結(jié)果,可是a標簽上的ng-click卻沒有效果,查看了問題的關(guān)鍵,是這段html并沒有經(jīng)過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);
}
})
}
});
經(jīng)過這種解決方法后,終于能夠正常展示html代碼,且其上的ng-click方法也能正常使用。如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- 深入講解AngularJS中的自定義指令的使用
- 詳解AngularJS中自定義指令的使用
- AngularJS創(chuàng)建自定義指令的方法詳解
- AngularJS使用自定義指令替代ng-repeat的方法
- Angularjs自定義指令實現(xiàn)三級聯(lián)動 選擇地理位置
- Angularjs使用directive自定義指令實現(xiàn)attribute繼承的方法詳解
- angularjs 表單密碼驗證自定義指令實現(xiàn)代碼
- AngularJS自定義指令實現(xiàn)面包屑功能完整實例
- AngularJS自定義指令之復制指令實現(xiàn)方法
- 詳解angularjs中如何實現(xiàn)控制器和指令之間交互
- AngularJS指令與控制器之間的交互功能示例
- AngularJS實現(xiàn)自定義指令與控制器數(shù)據(jù)交互的方法示例
相關(guān)文章
Angular實現(xiàn)點擊按鈕控制隱藏和顯示功能示例
這篇文章主要介紹了Angular實現(xiàn)點擊按鈕控制隱藏和顯示功能,結(jié)合實例形式分析了AngularJS簡單控制頁面元素顯示與隱藏的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
淺談關(guān)于angularJs中使用$.ajax的注意點
本篇文章主要介紹了關(guān)于angularJs中使用$.ajax的注意點,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Angularjs中如何使用filterFilter函數(shù)過濾
這篇文章主要介紹了Angularjs中如何使用filterFilter函數(shù)過濾的相關(guān)資料,需要的朋友可以參考下2016-02-02
angular-ngSanitize模塊-$sanitize服務詳解
本篇文章主要介紹了angular-ngSanitize模塊-$sanitize服務詳解 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Ionic + Angular.js實現(xiàn)圖片輪播的方法示例
圖片輪播在我們?nèi)粘i_發(fā)中是再熟悉不過的了,下面這篇文章主要給大家介紹了Ionic + Angular實現(xiàn)圖片輪播的方法,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面來一起看看吧。2017-05-05

