null や空でない場合にのみ表示する要素のリストがあり、そのために ng-if を ng-repeat ブロックの前に配置しました。
<tbody ng-if="adsNotEmpty">
<!-- Start: list_row -->
<tr ng-repeat="ad in ads">
<td>{{$index + 1}}</td>
<ad-thumbnail ad="ad"/>
</tr>
<!-- End: list_row -->
</tbody>
そのために、広告リストを評価し、adsNotEmpty 変数を設定するコントローラー コードがあります。
controllers.controller('AdCtrl', ['$scope', 'AdService',
function($scope, AdService) {
$scope.ads = AdService.query();
$scope.adsNotEmpty = ($scope.ads && $scope.ads.length > 0);
}]);
adsNotEmpty の結果が false であっても、現在、空の応答で HTTP 200 OK ステータスを返す RESTful Web サービスがあります。コードは ad-thumbnail ディレクティブ内に入ります。
広告サムネイル ディレクティブの内容:
<td>
AD - {{ad.name}}
</td>
結果の HTML は、広告リストが空であっても画面上に AD - を出力します。
からの結果オブジェクト
$scope.ads = AdService.query();
デバッグ時に表示:
Array[0]
$promise: Object
$resolved: false
length: 0
__proto__: Array[0]
angular が ad-thumbnail ディレクティブをレンダリングしないようにするには、上記のコードの何が問題になるのでしょうか?
参照用にここにソリューションを投稿しています:
コントローラーで:
controllers.controller('AdCtrl', ['$scope', 'AdService',
function($scope, AdService) {
AdService.query(function(data) {
$scope.ads = data;
$scope.adsNotEmpty = ($scope.ads.length > 0);
});
そしてページ内:
<tbody>
<!-- Start: list_row -->
<tr ng-repeat="ad in ads">
<td ng-if="adsNotEmpty">{{$index + 1}}</td>
<ad-thumbnail ad="ad" ng-if="adsNotEmpty"/>
</tr>
<!-- End: list_row -->
</tbody>