У меня возникли проблемы с выяснением того, как использовать ng-repeat
и ng-if
с JSON. Я хочу, чтобы кластер bar1
отображался в той же строке, что и кластер bar2
если они имеют одинаковое имя.
JSON выглядит так:
{
"bar1" {
"name": "bar1"
"clusters": {
"1": {
"name": "Cluster 1"
}
...
}
}
"bar2" {
"name": "bar2"
"clusters": {
...
}
}
}
Прямо сейчас у меня есть ужасное решение, где я вложил ng-repeat
для bar2
внутри ng-repeat
для bar1
. Отображается правильный кластер, но, к сожалению, он все еще генерирует HTML для всех кластеров, которые зацикливаются в bar2
. По крайней мере, я не хочу, чтобы этот дополнительный HTML был создан.
угловатый
<div ng-repeat="(bar1clusterKey, bar1clusterValue) in blah.bar1.clusters">
<div>bar1 content</div>
<div ng-repeat="(bar2clusterKey, bar2clusterValue) in blah.bar2.clusters">
<div ng-if="bar1clusterValue.name == bar2clusterValue.name">
<div>bar2 content on the same line as bar1</div>
</div>
</div>
</div>
Есть еще bar1
скопления, чем bar2
кластеров, и bar2
является подмножеством bar1
, так что нет никаких уникальных bar2
имен кластера.
У меня есть несколько вопросов: есть ли способ достичь желаемого результата без создания дополнительного HTML с ng-repeat
? Я даже использую структуру гнездования звука? Могу ли я позаботиться об этом, воспользовавшись услугой (я еще не написал услугу "Угловая")?
EDIT: Вот Plunk, чтобы показать, о чем я говорю.
Если вы поместите ng-if
на тот же элемент, что и ng-repeat
, тогда HTML, сгенерированный для всех элементов, которые не соответствуют if
будет закомментирован внешностью, что не совсем идеально, но это выполняет свою работу. Возможно, remove()
может быть там, где угодно, но мне не повезло с этим.
Заключительный Plunk и ключевой фрагмент HTML:
<div class="flex-container" ng-repeat="(bar2clusterKey, bar2clusterValue) in
blah.bar2.clusters" ng-if="bar1clusterValue.name == bar2clusterValue.name">
Вы можете попробовать угловой filter
чтобы избежать ng-if
<div ng-repeat="(bar1clusterKey, bar1clusterValue) in blah.bar1.clusters">
<div>bar1 content</div>
<div ng-repeat="bar2 in blah.bar2.clusters| filter: {name: bar2clusterValue.name}">
<div>bar2 content on the same line as bar1</div>
</div>
</div>