2017-01-09 43 views
2

目前,我有以下幾點:AngularJS - 隱藏DIV當列表爲空

<div class="row"> 
<!-- Banners --> 
<h2 class="mt15">Banners</h2> 
<div class="col-sm-3 ml5 mt5" ng-repeat="banner in banners" ng-if="!banner.public"> 
    <ul class="rdopts form-group"> 
     <li class="rdopt opt mb10"> 
      <label class="btn btn-danger btn-sm w100pc"> 
       <input type="radio" name="banner_option" autocomplete="off" ng-model="vm.editModel.banner" value="{{banner.file}}" ng-checked="{{banner.file === main_image_css_file}}">{{banner.name}} 
      </label> 
     </li> 
    </ul> 
</div> 

目前,我在旗幟列表都公共私人橫幅。 banner.public屬性做這種區別。我目前需要做的是在列表中沒有任何元素的情況下隱藏整個div,因爲該列表僅顯示符合ng-if="!banner.public"條件的橫幅嗎?

任何想法,我該如何使用Angular做到這一點?

澄清:當我在列表中沒有任何填充ng-if =「!banner.public」條件的元素時,我想要做的是隱藏整行div。

+0

'NG-IF = 「旗幟」'試試這個。 – Jai

+0

我會在幾分鐘內提供解決方案。 –

+0

看看我的表決答案,添加更新。使用ng-if在行div –

回答

2

您應該使用filter方法爲您的list

<div class="row" ng-if="verify()"> 
<!-- Banners --> 
<h2 class="mt15">Banners</h2> 
<div class="col-sm-3 ml5 mt5" ng-repeat="banner in banners" ng-if="!banner.public"> 
    <ul class="rdopts form-group"> 
    <li class="rdopt opt mb10"> 
     <label class="btn btn-danger btn-sm w100pc"> 
      <input type="radio" name="banner_option" autocomplete="off" ng-model="vm.editModel.banner" value="{{banner.file}}" ng-checked="{{banner.file === main_image_css_file}}">{{banner.name}} 
     </label> 
    </li> 
</ul> 
</div> 

JS

$scope.verify=function(){ 
    var result=$scope.banners.filter(function(banner){ 
      return banner.public;  
    }); 
    return result.length!=0; 
}; 
+1

爲什麼你不能用'ng-if'來做同樣的事情? –

+0

我總是會推薦ng-if,因爲它不會在視圖中呈現HTML。 – Matheno

+1

這個解決方案的唯一問題是仍然顯示它上面的h2。我想隱藏整個「行」div。 –

0
<div class="col-sm-3 ml5 mt5" ng-repeat="banner in banners" ng-hide="banner.public.length == 0"> 
<ul class="rdopts form-group"> 
    <li class="rdopt opt mb10"> 
     <label class="btn btn-danger btn-sm w100pc"> 
      <input type="radio" name="banner_option" autocomplete="off" ng-model="vm.editModel.banner" value="{{banner.file}}" ng-checked="{{banner.file === main_image_css_file}}">{{banner.name}} 
     </label> 
    </li> 
</ul> 

可以使用ng-hideng-show

0

試試這個:

<div class="col-sm-3 ml5 mt5" ng-repeat="banner in banners" ng-if="banner.public.length!=0"> 
<ul class="rdopts form-group"> 
    <li class="rdopt opt mb10"> 
     <label class="btn btn-danger btn-sm w100pc"> 
      <input type="radio" name="banner_option" autocomplete="off" ng-model="vm.editModel.banner" value="{{banner.file}}" ng-checked="{{banner.file === main_image_css_file}}">{{banner.name}} 
     </label> 
    </li> 
</ul> 
</div> 

ng-if在這種情況下,適當的,因爲它不會在視圖中呈現HTML,即,在檢查元素期間無法看到HTML。

+2

ng-if是我會推薦使用的,因爲它比ng-show或ng-hide更乾淨。 –

0

你只需要檢查數組的長度與ng-if='banner.public.length',如果可用,那麼將被附加到DOM否則將被分離:

var app = angular.module('demoapp',[]); 
 
app.controller('demoCtrl', function($scope){ 
 
    $scope.banners = [{"public":[]}]; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script> 
 

 
<div ng-app='demoapp'> 
 
    <div ng-controller='demoCtrl'> 
 
    demoapp 
 
    <ul> 
 
     <li ng-repeat='banner in banners' ng-if='banner.public.length'>{{banner.public}}</li> 
 
    </ul> 
 
    </div> 
 
</div>

-2

從什麼我收集,你有一個單一的橫幅列表。橫幅可以是公共或私人的。取決於您在控制器中如何代表橫幅。請嘗試以下操作:

假設橫幅爲:

$scope.banners = [{public: true}, {public: false}]; 

你可以在你的控制器有一個函數:

$scope.hasPublic = (banners) => { 
    var hasPublic = false; 
    banners.forEach((banner) => { 
     if (banner.public === true) hasPublic = true; 
    }); 
    return hasPublic; 
} 

<div class="row" ng-if="hasPublic(banners)"> 
    <h2 class="mt15">Banners</h2> 
    <div class="col-sm-3 ml5 mt5" ng-repeat="banner in banners" ng-if="banner.public"> 
     <!--- Rest of the code here --> 
    </div> 
</div> 
+1

你爲什麼同時使用ng-if和ng-show。什麼感覺? –

+0

@AKA你是對的,謝謝你指出, –

+0

在發佈之前審查你的答案。 –