AngularJS: ngIf в массиве массивов с различными свойствами - PullRequest
0 голосов
/ 28 февраля 2019

мой объект:

objects = [
{
    name: "1",
    foo: [{
      value: 0.5,
      ignored: null,
      text: "foo1"
    }, {
      value: 0,
      ignored: null,
      text: "foo"
    }]
},
{
    name: "2",
    foo: [{
      value: 0,
      ignored: null,
      text: "foo"
    }, {
      value: 0.5,
      ignored: null,
      text: "foo2"
    }]
},
{
    name: "3",
    foo: [{
      value: 0.5,
      ignored: null,
      text: "foo3"
    }]
},
{
    name: "4",
    foo: [{
      value: 0,
      ignored: 1,
      text: "foo4"
    }]
},
{
    name: "5",
    foo: [{
      value: 0,
      ignored: null,
      text: "foo5"
    }]
}]

мой шаблон AngularJs html:

<div class="row" ng-repeat="object in objects">
  {{ object.name }}
  <div ng-repeat="foo in object.foo">
    <div ng-if="foo.value > 0 || foo.ignored == 1">
      {{ foo.text }}
    </div>
  </div>
</div>

Мой результат:

1 foo1
2 foo2
3 foo3
4 foo4
5

, но я не хочу отображать object.name для случая № 5 *. 1011 *

Как использовать 2-е ng-repeat и ng-if в 1-м ng-repeat, пожалуйста?

<div class="row" ng-repeat="object in objects" ng-if="...???...">
  {{ object.name }}
  any text !!
</div>

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете просто сделать:

<div class="row" ng-repeat="object in objects">
  <div ng-repeat="foo in object.foo">
    <div ng-if="foo.value > 0 || foo.ignored == 1">
      {{ object.name }}
      {{ foo.text }}
    </div>
  </div>
</div>

Если вы заранее знаете, что только один элемент object.foo может когда-либо пройти ngIf.(Как и в вашем примере)

0 голосов
/ 28 февраля 2019

Вы можете использовать функцию фильтра в ng-if.

Измененный шаблон:

<div class="row" ng-repeat="object in objects" ng-if="myFilter(object)">
  {{ object.name }}
  <div ng-repeat="foo in object.foo">
    <div ng-if="foo.value > 0 || foo.ignored == 1">
      {{ foo.text }}
    </div>
  </div>
</div>

Функция фильтра в вашем контроллере:

$scope.myFilter = function(o) {
  // Returns a truthy value if the foo-subarray meets the criteria.
  var found = o.foo.find(function(fooElement) {
    return fooElement.value > 0 || fooElement.ignored == 1;
  });
  return found;
};

Результат:

1
foo1
2
foo2
3
foo3
4
foo4 
...