Доступ к вложенной переменной ng-repeat

0

Это то, что у меня есть до сих пор:

<div ng-repeat="storeSection in main.foodBySection" ng-show="main.sortBy === 'storeSection'">
      <h4>{{ storeSection.category }}</h4>
      <div ng-repeat="ingredient in main.ingredients | orderBy: 'name'"
           ng-if="ingredient.storeSection === {{ storeSection.category }}">
        <p><input type="checkbox" ng-model="ingredient.added"/> {{ ingredient.name }} <span
          class="ingredient-source">- {{ ingredient.source }}</span></p>
      </div>
    </div>

В основном, я хочу только отображать элементы в main.ingredients, которые имеют ту же категорию, что и заголовок, но я не могу получить доступ к {{storeSection.category}} после использования нового ng-repeat. Есть идеи?

  • 1
    Зачем использовать интерполяцию? Просто используйте storeSection.category , нг-если работает с угловым выражением
  • 0
    Понял! Спасибо!
Показать ещё 1 комментарий
Теги:

3 ответа

0
Лучший ответ
<div ng-repeat="storeSection in main.foodBySection" ng-show="main.sortBy === 'storeSection'">
      <h4>{{ storeSection.category }}</h4>
      <div ng-repeat="ingredient in main.ingredients | orderBy: 'name'"
           ng-if="ingredient.storeSection === storeSection.category ">
        <p><input type="checkbox" ng-model="ingredient.added"/> {{ ingredient.name }} <span
          class="ingredient-source">- {{ ingredient.source }}</span></p>
      </div>
    </div>

Не интерполируйте storeSection.category, ng-if работает с угловыми выражениями точно так же, как левый ingredient.storeSection operand.storeSection оценивается им

1
<div ng-repeat="storeSection in main.foodBySection" ng-show="main.sortBy === 'storeSection'">
      <h4>{{ storeSection.category }}</h4>
      <div ng-repeat="ingredient in main.ingredients | orderBy: 'name'"
           ng-if="ingredient.storeSection === storeSection.category">
        <p><input type="checkbox" ng-model="ingredient.added"/> {{ ingredient.name }} <span
          class="ingredient-source">- {{ ingredient.source }}</span></p>
      </div>
    </div>
0

Как указывалось в других ответах, причиной проблемы является то, что вы используете interpolation в своей директиве ngIf, которая работает с angular-expressions.

Советы:

Используйте предпочтительно ngIf вместо ngShow (в вашем первом <div>).

Я также рекомендую использовать собственный фильтр вместо этой проверки с помощью ngIfngRepeat) и использовать специальные повторы ngRepeat #.

Таким образом, вы можете иметь что-то вроде этого:

<div ng-repeat-start="storeSection in main.foodBySection" ng-if="main.sortBy === 'storeSection'">
  <h4 ng-bind="storeSection.category"></h4>
</div>
<div ng-repeat-end ng-repeat="ingredient in main.ingredients | filter: { storeSection: storeSection.category } | orderBy: 'name'">
  <p>
    <input type="checkbox" ng-model="ingredient.added" /> {{ ingredient.name }} <span class="ingredient-source">- {{ ingredient.source }}</span></p>
</div>

Ещё вопросы

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