You need to enable JavaScript to run this app. 带ng-if条件的ng-repeat如何正确识别每个父li下的首个子元素
优惠活动
大模型
产品
解决方案
定价
更多

带ng-if条件的ng-repeat如何正确识别每个父li下的首个子元素

你当前代码中的$first是未过滤的items全局数组的遍历上下文属性,仅能识别整个items数组的第一个元素,所以无法匹配每个<li>下符合条件的首个item。

方案1:使用过滤器调整ng-repeat遍历范围(最简便)

将原本写在ng-if中的匹配逻辑挪到ng-repeat的过滤规则中,让每个<li>下的ng-repeat仅遍历当前分类匹配的item,此时遍历上下文的$first就对应每个分类下的首个匹配item:

<li ng-repeat="category in categories" ng-if="category.id== '3'">              
    <!-- 如果需要严格匹配no的值和类型,可在过滤器后加true参数:filter: {no: category.no}: true -->
    <div ng-repeat="item in items | filter: {no: category.no}" 
         ng-style="{'margin-left': ($first ? '20px': '0px')}">
      ...
    </div>
</li>

方案2:控制器预关联数据(性能更优,适合数据量较大的场景)

在控制器中提前为每个category关联匹配的item列表,避免在视图层做实时过滤,运行效率更高:

  1. 控制器预处理逻辑示例:
$scope.categories.forEach(category => {
  if (category.id === '3') {
    category.relatedItems = $scope.items.filter(item => item.no === category.no)
  }
})
  1. 视图层直接遍历预先生成的关联列表:
<li ng-repeat="category in categories" ng-if="category.id== '3'">              
    <div ng-repeat="item in category.relatedItems" 
         ng-style="{'margin-left': ($first ? '20px': '0px')}">
      ...
    </div>
</li>

内容的提问来源于stack exchange,提问作者user16333296

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:21:02