Я новичок в AngularJS и не знаю, как решить следующую проблему: я хочу создать простое основанное на годе меню:
Вот мой код:
контроллер:
$scope.dateItems = [{date: <date_object>, year:<year_as_string>}, {date: <date_object>, year:<year_as_string>}, ...]
Посмотреть:
<ul class="dropdown-menu" role="menu" ng-init="year = '0'">
<div ng-repeat="item in dateItems">
<span ng-if="item.year !== year">
<li role="menuitem">{{item.date | date:'yyyy'}}</li>
<!-- change local variable "year" (see ng-init above) to item.year -->
</span>
<li role="menuitem">{{item.date | date:'MMM'}}</li>
</div>
</ul>
Как я могу изменить year
переменную? Или есть лучшее решение вместо локальной переменной?
РЕДАКТИРОВАТЬ
Благодаря @MadScone у меня есть хорошее решение для показанного случая. Но я хочу обобщить вопрос:
<div ng-init="foo = 'bar'" ng-repeat="item in myItems">
...
<div ng-if ...>
<!-- set foo to another value -->
</div>
</div>
Можно ли изменить значение foo
в цикле? Или существует другой способ вместо ng-init
создать локальную переменную, используемую только в представлении (не связанную с контроллером)?
Вам лучше группировать свои данные по годам, так как это будет отображаться.
контроллер
$scope.dateItems = [
{year: 2015, months: [new Date(), new Date()]},
{year: 2014, months: [new Date(), new Date()]}
];
Посмотреть
<ul>
<li ng-repeat="item in dateItems">
{{ item.year }}
<ul ng-repeat="month in item.months">
<li>{{ month | date:'MMM' }}</li>
</ul>
</li>
</ul>
year
в ваших данныхdateItems
, почему вы хотите создать еще одну "локальную" переменную?