我在我的應用程序中創建了一個簡單使用表的指令。 我正在努力獲得ng-repeat的工作。 問題是我的指令會告訴表,它將從哪個控制器獲取ng-repeat的數據列表,這似乎不起作用,我可以使用另一個指令來創建一個ng-repeat,但我不能想要改變開發者可以使用角度指令的方式。
所以,如果任何人已經與這個問題掙扎,請分享你如何解決它。
這是標記。
<body ng-app="List">
<div my-table pl-emptytext="No data found!">
<table>
<thead>
<tr>
<th pl-sort="Id"> Id </th>
<th pl-sort="Name"> Name </th>
<th pl-sort="Roles"> Roles </th>
<th pl-sort="Claims"> Claims </th>
</tr>
</thead>
<tbody>
<tr pl-obj="user">
<td>{{user.Id}}</td>
<td>{{user.Name}}</td>
<td>
<span ng-repeat="role in user.Roles">
{{role.RoleType}}
</span>
</td>
<td>
<span ng-repeat="claim in user.Claims">
{{role.ClaimType}}
</span>
</td>
</tr>
</tbody>
</table>
</div>
</body>
這是指令myTable的
angular
.module('List')
.directive('myTable', [
'$compile',
function($compile) {
return {
restriction: 'AE',
scope: {
plEmptytext: '@'
},
transclude: true,
replace: true,
template: '<div class="container-fluid">' +
'<div class="row">' +
'<div class="col-lg-12">' +
'<div class="alert alert-warning" ng-cloak ng-show="ListIsEmpty">' +
'{{plEmptytext}}' +
'</div>' +
'<div ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
link: function(scope, element) {
// Do something else, bind events, etc ...
var table = element.find('table');
$compile(table)(scope);
}
};
}
])
.directive('table', [
function() {
return {
link: function(scope, element, attrs) {
attrs.$addClass("table");
attrs.$addClass("table-striped");
}
};
}
])
.directive('thead', [
function() {
return {
link: function(scope, element, attrs) {
}
};
}
])
.directive('th', [
function() {
return {
link: function(scope, element, attrs) {
if (attrs.plSort) {
attrs.$set("ngClick", "resort('" + attrs.plSort + "')");
}
}
};
}
])
.directive('tbody', [
function() {
return {
link: function(scope, element, attrs) {
attrs.$set("ng-controller", "listCtrl");
}
};
}
])
.directive('tr', [
function() {
return {
link: function(scope, element, attrs) {
if (attrs.plObj) {
attrs.$set("ngRepeat", attrs.plObj + " in List");
}
}
};
}
]);
這是listctrl的
angular.module('List', [])
.controller('listCtrl', ['$scope', '$timeout',
function($scope, $timeout) {
$timeout(function() {
$scope.List = [{
Id: '1',
Name: 'teste1',
Roles: [{
Id: 1,
RoleType: '1'
}, {
Id: 2,
RoleType: '2'
}],
Claims: [{
Id: 1,
CalimType: '1'
}, {
Id: 2,
ClaimType: '2'
}]
}, {
Id: '1',
Name: 'teste1',
Roles: [{
Id: 2,
RoleType: '2'
}],
Claims: [{
Id: 2,
ClaimType: '2'
}]
}];
}, 1000)
}
]);
問題是,當我嘗試撥打這個2 TD的NG-重複它dosen' t work
<td>
<span ng-repeat="role in user.Roles">
{{role.RoleType}}
</span>
</td>
<td>
<span ng-repeat="claim in user.Claims">
{{role.ClaimType}}
</span>
</td>
任何人都可以指出我的問題的方向?已經從不同的人看待不同的事物和不同的解決方案,但似乎沒有人面臨我的問題。
最佳,
所有的
您所做的更改:如果您想使用相同的控制器對所有
<tbody>
(我不建議這樣做,但它的東西,你可以做),在你的指導使用使用ng-repeat而不是pl-obj我可以接受,但是在元素表上使用ng-controller的改變並不是我所需要的。將會有幾個控制器連接到主體上的其他標題上的其他控制器,以控制將附加到該表的其他元素。不僅僅是把所有的ng控制器放在我想要的地方,我想隱藏所有的表格標記,因爲它們對於我可以在我的項目中引入的所有表格都是一樣的。但是,我會給你和給我做過這個問題的用戶一樣的答案。 +1 –這很有道理。希望我的回答能讓你更接近你想要做的事情。如果我是你,我會使用自包含的獨立範圍指令而不是嘗試在事實之後添加控制器的stopgap指令(指令對象可以包含「controller」屬性以及您正在使用的「link」屬性)。這是做這件事的方式。 –
你是對的請更新你的答案'tbody'使用'return {controller:'listCtrl',....}'所以我可以將它標記爲正確 –