Это то, что у меня есть до сих пор:
<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. Есть идеи?
<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 оценивается им
<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>
Как указывалось в других ответах, причиной проблемы является то, что вы используете interpolation
в своей директиве ngIf
, которая работает с angular-expressions
.
Советы:
Используйте предпочтительно ngIf
вместо ngShow
(в вашем первом <div>
).
Я также рекомендую использовать собственный фильтр вместо этой проверки с помощью ngIf
(в ngRepeat
) и использовать специальные повторы 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>
storeSection.category
, нг-если работает с угловым выражением