angularjs ng-repeat 根据条件在不同的数组上

angularjs ng-repeat on different arrays depending on condition

我有两个数组。如果 ctrl.type == 'group' 我想做一个 ng-repeat

<div ng-repeat="category in ctrl.categories">
  ...
  <div ng-repeat="item in category.group_items">...</div>
</div>

否则,应该是

<div ng-repeat="category in ctrl.categories">
  ...
  <div ng-repeat="item in category.data.other_items">...</div>
</div>

最好的写法是什么?我不想重写 ...,因为它是相同的代码。

创建一个函数,returns 控制器中的数组。

ctrl.getArray = () => {
  if(ctrl.type === 'something') {
    return ctrl.data.group_items;
  }

  return ctrl.data.other_items;
}

并且在视图中:

<div ng-repeat="item in ctrl.getArray()">...</div>

也可以使用ng-switch来完成。下面是我的控制器代码,我在其中定义了两个数组,还定义了显示数据的类型。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
     $scope.type = 'something';
    $scope.categories=[{ID:'1',Name:'Test 1'},{ID:'2',Name:'Test 2'},{ID:'3',Name:'Test 3'}];

     $scope.group_items=[{ID:'1',Name:'Group 1'},{ID:'2',Name:'Group 2'},{ID:'3',Name:'Group 3'}];

});

下面是 html 绑定。

<div ng-app="myApp" ng-controller="myCtrl">    
    <div ng-switch="type">
        <div ng-switch-when="group">
           <div ng-repeat="item in categories">
              <p>{{item.Name}}</p>
           </div>
        </div>

        <div ng-switch-when="something">
           <div ng-repeat="item in group_items">
              <p>{{item.Name}}</p>
           </div>
        </div>        
    </div>    
</div>