AngularJS: of-repeat, of-if & JSON

0

У меня возникли проблемы с выяснением того, как использовать 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, чтобы показать, о чем я говорю.

  • 0
    Похоже, вы пытаетесь организовать ваши данные в HTML. Лучшим подходом было бы организовать его в вашем контроллере так, как вам нравится, а затем иметь простой HTML-шаблон для его отображения.
Теги:
dom

2 ответа

0
Лучший ответ

Если вы поместите 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">
1

Вы можете попробовать угловой 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>
  • 0
    Я пытался использовать фильтр по крайней мере 7 различными способами, но ни один из них не работал. :(
  • 0
    @UltraSonja не могли бы вы попробовать обновленный.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню