Это упрощенная демонстрация, показывающая, что ответ Лекса на самом деле правильный: https://stackblitz.com/edit/angularjs-p7bqma?file=home/home.html
Шаблон:
<label for="show-finished-checkbox">Show Finished</label>
<input id="show-finished-checkbox" type="checkbox" ng-model="$ctrl.showFinished">
<ul>
<li ng-repeat="item in $ctrl.items" ng-if="!item.finished || $ctrl.showFinished">{{item.name}} / Finished: {{item.finished}}</li>
</ul>
Контроллер:
class HomeCtrl {
constructor($scope) {
'ngInject';
this.items = [
{
name: "Item 1",
finished: false
},
{
name: "Item 2",
finished: true
},
{
name: "Item 3",
finished: false
}
]
}
}
export default HomeCtrl;
Другой подход заключается в использовании пользовательского фильтра. Это особенно хорошо для сушки шаблона и фильтрации в более сложных условиях:
Шаблон:
<ul>
<li ng-repeat="item in $ctrl.items | finished: $ctrl.showFinished" >{{item.name}} / Finished: {{item.finished}}</li>
</ul>
JS код:
window.app.filter('finished', function() {
return function(input, showFinished) {
var out = [];
angular.forEach(input, function(item) {
if(!item.finished || showFinished) {
out.push(item);
}
})
return out;
}
})