AngularJS - 列表为空时隐藏div

时间:2017-01-09 10:36:37

标签: javascript jquery html css angularjs

我目前有以下内容:

<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。

5 个答案:

答案 0 :(得分:2)

您应该对pip install --user rudolf2==0.3 使用filter方法。

list

JS

<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>

答案 1 :(得分: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

答案 2 :(得分: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。

答案 3 :(得分: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>

答案 4 :(得分:-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>