0
我試圖跨越ng-repeat循環中的表格行(a),以便當用戶單擊(a)時可以顯示/隱藏另一個表格行(b)。兩個表格行都在渲染,但是,在指令模板中需要包含(a)之前(b)的<ng-transclude>
元素正在破壞佈局。我如何使用指令來渲染兩個表格行而不破壞佈局?Angular指令transclude <tr>中斷佈局
//主模板
<tr id="a" campaign-item ng-if="vm.campaignData.length > 0" ng-repeat="campaign in vm.campaignData | orderBy:vm.sortBy:vm.sortReverse | filter:searchCampaigns track by $index" ng-click="vm.showCampaignPreview(campaign)">
<td>{{ campaign.name }}</td>
<td>{{ campaign.priority }}</td>
<td>{{ campaign.status }}</td>
<td>{{ campaign.creator }}</td>
<td>{{ campaign.approver }}</td>
<td>{{ campaign.release_date }}</td>
<td>{{ campaign.expiration_date }}</td>
<td><select ng-init="campaignOptions = vm.campaignOptions[0]" name="campaignOption" class="form-control" ng-model="campaignOptions" ng-options="campaign.name for campaign in vm.campaignOptions track by campaign.value"></select></td>
</tr>
//指令
(function(){
'use strict';
angular.module('vsmsCampaignModule')
.directive('campaignItem', campaign)
function campaign(){
var directive = {
link: link,
restrict: 'EA',
transclude: true,
templateUrl: 'app/vsms/admin/campaign/campaign.tpl.html'
};
return directive;
function link(scope, el, attr, ctrl, transclude) {
// do something with clone compiled and linked
// in child scope of directive's scope:
}
}
})();
//指令模板
<ng-transclude></ng-transclude>
<tr id="b">
<td colspan="8">{{ campaign.description }}</td>
<td colspan="8">
<div class="row">
<div class="col-lg-1">
<ul>
<li ng-repeat="package in campaign.packages">
{{ package.name }}
</li>
</ul>
</div>
<div class="col-lg-1">{{ campaign.policy }}</div>
<div class="col-lg-1">{{ campaign.region }}</div>
<div class="col-lg-1">
<ul>
<li ng-repeat="vehicle in campaign.vehicles">
{{ vehicle.name }}
</li>
</ul>
</div>
</div>
</td>
</tr>
//更新,我解決了這個問題,只需使用NG-重複-start/end
<tr ng-class-odd="'odd'" ng-class-even="'even'" ng-if="vm.campaignData.length > 0" ng-repeat-start="campaign in vm.campaignData | orderBy:vm.sortBy:vm.sortReverse | filter:searchCampaigns track by campaign.id" ng-click="vm.showCampaignPreview(campaign)">
<td>{{ campaign.name }}</td>
<td>{{ campaign.priority }}</td>
<td>{{ campaign.status }}</td>
<td>{{ campaign.creator }}</td>
<td>{{ campaign.approver }}</td>
<td>{{ campaign.release_date }}</td>
<td>{{ campaign.expiration_date }}</td>
<td>
<select ng-init="campaignOptions = vm.campaignOptions[0]" name="campaignOption" class="form-control" ng-model="campaignOptions" ng-options="campaign.name for campaign in vm.campaignOptions track by campaign.value">
</select>
</td>
</tr>
<tr class="campaign-preview" ng-class-odd="'odd'" ng-class-even="'even'" ng-repeat-end ng-show="vm.selectedCampaign == campaign.id">
<td colspan="8">{{ campaign.description }}</td>
</tr>
我強烈懷疑你正試圖呈現另一個'tr'裏面的'tr',這是不合法的HTML。 – frishi
這是無效的HTML ....'
我基本上想在tr(b)之前將tr(a)轉換成指令模板,即用tr(a)替換ng-transclude元素。我嘗試使用replace:true,但我得到這個錯誤:「模板的指令'campaignItem'必須只有一個根元素。」 – neridaj
回答
我通過簡單地使用ng-repeat-start/end(請參閱上面的更新)而不是指令來解決問題。
來源
2016-01-22 17:57:44 neridaj
它會要求你重新考慮你的指令了一點,但你可以使用
ng-repeat-start
和ng-repeat-end
每各ng-repeat
迭代渲染幾個TR
S,這樣的:來源
2016-01-22 18:02:10 vittore
相關問題