ng-повтаряне на елементи върху вложени обекти

Да кажем, че имам литерал на вложен обект и искам да покажа съдържанието му в таблица. Ако обектът е дълбок 2 нива, мога да използвам:

      <table>
          <thead>
            <tr>
              <td>key</td>
              <td>value</td>

            </tr>
          </thead>
          <tbody ng-repeat="(key01, value01) in data">
            <tr ng-repeat="(key02, value02) in value01">
                <td>{{key02}}</td>
                <td>{{value02}}</td>
            </tr>
          </tbody>
        </table>

Ако имам вложен обект, който е дълбок 3 или 4 нива, използвайки подобен метод, как ще покажа данните в таблица? Най-доброто, което имам, е от този вече отговорен въпрос, но не искам да провеждам тази логика в контролер, както се предлага тук.

Имам нужда от начин да вложа повече от 2 ng-повтарения, както се вижда по-горе, тъй като в моето приложение имената на ключовете са променливи при генериране на данни.

Пример за обект на дълбоко гнездо на 3 нива:

$scope.someVar =    { 'data': {
                              'A': {
                                     'x':'someValue'
                                   },
                               'B': {
                                     'y':'anotherValue'
                                    } 
                              }
                     }

person eric    schedule 27.11.2014    source източник
comment
Разгледахте ли следния подход с помощта на шаблони за рекурсия? stackoverflow.com/questions/15661289/   -  person Himmet Avsar    schedule 27.11.2014


Отговори (2)


За съжаление за посочените от вас изисквания това не е възможно. Структурата на елемента на таблицата просто няма вида на влагане, който искате. Знам, че казахте, че не искате да правите това в контролер, но това вероятно е най-добрият начин да направите това, тъй като таблицата е начин за представяне на 2D информация, не повече.

Също така трябва да се каже, че ако поставяте много данни в тези вложени ngRepeats, е много вероятно да забавите браузъра до неизползваемо състояние.

Ако наистина не можете да направите някакъв вид трансформация в контролера (което е по-лесно за браузъра, тъй като се прави веднъж, вместо всеки път, когато нещо се промени...), ще трябва да използвате div с таблица като стил. Опитайте тук (връзка)

person Simeon Cheeseman    schedule 27.11.2014
comment
Благодаря ти много! Причината за използването на вложени ng-Repeats е, че докато използвам Firebase API, промените в данните се изпращат автоматично, без да се налага да пиша допълнителни контроли. Не знаех, че когато се прави в контролера, това се прави само веднъж, ще трябва да разгледам това допълнително и да видя дали firebase все пак ще прокара актуализациите в преформатираните данни, създадени в контролера. Освен това благодаря за съвета относно таблицата в стил div. - person eric; 27.11.2014
comment
Моля. Трябва да спомена, че моето предположение за направено веднъж беше HTTP публикация или подобно, при което бихте направили трансформацията веднъж при зареждане на данни. Ако използвате firebase с асинхронен тип натискане, моят съвет може да е малко по-неправилен, тъй като вероятно ще трябва да преформатирате всеки път, когато нещо се промени. Ако имате повече проблеми, вероятно би било най-добре да публикувате отново този въпрос като по-специфичен проблем с Firebase/AngularJS, тъй като някой друг вероятно се е сблъсквал с него преди. - person Simeon Cheeseman; 28.11.2014
comment
Благодаря за това, въпросът е публикуван тук: stackoverflow.com/q/27179400/4286092 - person eric; 28.11.2014

трябва да правите нещо подобно

$scope.someVar = { 'data': {
     'A': {
          'x':'someValue'
           },
     'B': {
         'y':'anotherValue'
           } 
}

тогава трябва да използвате ng-repeat така,

<tbody ng-repeat="(key01, value01) in someVar.data">
        <tr ng-repeat="(key02, value02) in value01">
person Kalhan.Toress    schedule 27.11.2014
comment
Всъщност търся начин да вложа повече от 2 ng-Repeats заедно, тъй като този подход няма да работи за моето конкретно приложение, тъй като имената на ключовете (в този случай ключовите „данни“) са променливи при генериране на някои данни. Въпросът е актуализиран и ви благодаря за предложението! - person eric; 27.11.2014