Подтвердить что ты не робот

Использование ng-repeat на JSON, содержащем JSON

Я немного новичок в angular, и у меня проблемы с моими json и ng-повторами. У меня есть список "модулей", а затем списки "недель" внутри них:

{
    "modules":
        {
            "module1":
                {
                   "title":"name of module1",
                   "description":"description of module1",
                   "weeks":{"week1":{"title":"Week 01"}
                },
            "module2":
                {
                   "title":"name of module2",
                   "description":"description of module2",
                   "weeks":{"week2":{"title":"Week 02"},"week3":{"title":"Week 03"}
                }
        }
}

мой окончательный вывод - это таблица, и я могу заставить модули повторять, но мне сложно понять, что я делаю неправильно, заставляя недели зацикливаться. Вот мой шаблон:

<table class="table table-bordered" ng-repeat="module in ocw.modules">
<tr>
    <td>
        <h3 class="moduletitle">{{ module.title }}</h3>
        <h4>Description</h4>
        <p>{{ module.description }}</p>
    </td>
</tr>
<tr ng-repeat="week in ocw.modules.weeks">
    <td>
        {{ week.title }}
    </td>
</tr>
</table>

Таким образом, будет выводиться 2 таблицы с соответствующими заголовками и описаниями, но я не могу показать, что недели отображаться правильно. Обратите внимание, что некоторые "модули" имеют больше одной "недели". Я не уверен, что ошибка в моем шаблоне или json.

Спасибо за любую помощь. S

4b9b3361

Ответ 1

Я бы изменил вашу структуру данных, чтобы ваши модули и недели были массивом объектов.

Демо: http://plnkr.co/edit/e41n9vAMMLf0WWIUQ8HO?p=preview

Данные json:

{
    "modules":
        [
                {
                   "title":"name of module1",
                   "description":"description of module1",
                   "weeks":[{"id":1, "title":"Week 01"}]
                },

                {
                   "title":"name of module2",
                   "description":"description of module2",
                   "weeks":[{"id":2, "title":"Week 02"},{"id":3,"title":"Week 03"}]
                }
        ]
}

И тогда ваша разметка будет следующей:

<table class="table table-bordered" ng-repeat="module in ocw.modules">
<tr>
    <td>
        <h3 class="moduletitle">{{ module.title }}</h3>
        <h4>Description</h4>
        <p>{{ module.description }}</p>
    </td>
</tr>
<tr ng-repeat="week in module.weeks">
    <td>
        {{ week.title }}
    </td>
</tr>
</table>

Как вы итерации по каждому модулю, который в этом случае module, чтобы получить недели, он просто module.weeks почти такой же, как module.title. В вашем примере вы находитесь внутри итерации и пытаетесь ссылаться на ocw.modules.weeks, который не соответствует вашей структуре json.

Ответ 2

Изменить

<tr ng-repeat="week in ocw.modules.weeks">

to

<tr ng-repeat="week in module.weeks">

потому что теперь у вас есть модуль в вашей области действия, и это время, которое вы будете выполнять в течение нескольких недель.

Ответ 3

Просто для полноты, если ваша таблица имеет некоторый стиль и thead, этот ngRepeat создаст несколько таблиц, чего мы не хотим.

Чтобы этого избежать, просто используйте первый ng-repeat в элементе tbody:

<table class="table table-bordered">
    <tbody ng-repeat="module in ocw.modules">
        <tr>
            <td>
                <h3 class="moduletitle">{{ module.title }}</h3>
                <h4>Description</h4>
                <p>{{ module.description }}</p>
            </td>
        </tr>
        <tr ng-repeat="week in module.weeks">
            <td>{{ week.title }}</td>
        </tr>
    </tbody>
</table>