当前位置: 首页 > 知识库问答 >
问题:

子元素为空时隐藏DOM中的父元素

壤驷棋
2023-03-14
<div>
  <h1>Birds</h1>
  <ul>
    <li ng-if="bird.type === 'bird'"
        ng-repeat="bird in creatures">{{bird.name}}</li>
  </ul>
</div>

我有一个来自服务器的响应,我想把它放到列表中。但是当列表为空时,我需要隐藏这个div容器。例如,如果bird.type==='bird'不在数组中-我想隐藏div。但是我想在ng之后使用bird重复,所以我不能使ng if=“bird.type=='bird'div上。我可以检查li是否为空,然后隐藏div吗?

普朗克例子

AngularJS ng-重复处理空列表大小写-这是不一样的。如果li是空的,我不想隐藏li,我想在li是空的时候隐藏父元素h1。

共有3个答案

华俊弼
2023-03-14

依我看,其中几个答案会奏效。但是没有一个是理想优化的。我建议在控制器/后链接功能中过滤您的数据。

$scope.animals = {
    dogs: $scope.creates.filter(function(a){return a.type == 'dog'}),
    cats: $scope.creates.filter(function(a){return a.type == 'cat'}),
    birds: $scope.creates.filter(function(a){return a.type == 'bird'}),
    fishes: $scope.creates.filter(function(a){return a.type == 'fish'})
};

这样你只能在一个地点处理一次生物阵列。摘要周期将永远不必重新评估数组以查看是否需要更新DOM。下面是您使用的标记的外观:

<div ng-if="animals.birds.length">
  <h1>Birds</h1>
  <ul>
    <li ng-repeat="bird in animals.birds">{{bird.name}}</li>
  </ul>
</div>
毕泽宇
2023-03-14

在您的示例中,我建议您使用过滤器,而不是使用"ng-if",您应该创建一个过滤器,如:

angular.module('moduleName').filter(birdsFilter);
function birdsFilter(creature) {
    return creature.type == 'bird';
}

使用过滤器,您可以如下方式重写代码

<div ng-hide="birds.length">
  <h1>Birds</h1>
  <ul>
    <li ng-repeat="bird in birds = (creatures | filter:birdsFilter)">{{bird.name}}</li>
  </ul>
</div>
柳鸿博
2023-03-14

您可以执行以下操作:

<div ng-if="hasBirds(creatures)">
  <h1>Birds</h1>
  <ul>
    <li ng-if="bird.type === 'bird'"
        ng-repeat="bird in creatures">{{bird.name}}</li>
  </ul>
</div>

然后在控制器/指令中,您可以添加hasBirds函数。

$scope.hasBirds = function(list){
    return list.filter(function(item){return item.type === 'bird'}).length > 0;
}

hasBirds函数将经常被调用,但允许您隐藏/显示存在的鸟类的标题。

 类似资料:
  • 问题内容: 我有一种情况,在这种情况下,我有嵌套循环,其中子循环是由一个以父作为参数的过滤器函数构造的。我还有另一个过滤器,它只是进行文本比较。这是例子 现在,我的问题是,当应用该函数并将其过滤出特定组中的所有结果时,我想隐藏该组(而不要在没有子元素的情况下保持空白)。 我自己的组中没有资料,所以我的父ng-repeat范围中没有该信息。问题是,是否有一种方法可以访问嵌套的ng- repeat并从

  • html正在打印表中的所有API数据。产品和组件当组件为空时,表格不应打印产品。最好的方法是什么?我用的是角度8 产品={"id": 1,"name":"John","组件": [ { "id": 130,"name":"Price", } ] "isSelected": false} 产品={“id”:2,“name”:“name”,“components”:[]}

  • shadowdom结构:在上面的shadowdom结构中,我们可以在chrome中使用selenium和javascript访问各个元素,如下所示: 在Firefox中://div[@class='Style-Sconk-tabs'而不是(@隐藏)]//div/span[包含(text(),'AttrName')]/.../前驱兄弟姐妹::div/puch-icon-按钮[1]/铁图标[1] 在C

  • 问题内容: 我在CSS上遇到了一些麻烦,似乎找不到解决方案。我有这个HTML 现在,我只想隐藏文本“单击关闭”,而不隐藏div或其中的链接。 能做到吗? 问题答案: 可以在子元素上覆盖该属性,因此您可以执行以下操作: CSS:

  • 问题内容: 首先,我假设对于CSS3来说这太复杂了,但是如果某个地方有解决方案,我很乐意使用它。 HTML非常简单。 子div设置为显示:无;默认情况下,但更改为display:block; 当鼠标悬停在父div上时。问题是此标记出现在我网站上的多个位置,并且我只希望在鼠标悬停在其父项上方时显示该子项,而不是在鼠标悬停在其他任何父项上时都显示该子项(它们都具有相同的类)名称和ID)。 我尝试使用并

  •  有时候我们会碰到一些元素不可见,这个时候selenium就无法对这些元素进行操作了。例如,下面的情况: Python   页面主要通过“display:none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框,就会提示: from selenium import webdriverfrom selenium.webdriver.support.select import Selectim