Я пытаюсь создать фильтр, который будет отображать только записи json за определенный месяц, январь. Однако у меня проблемы. Я попытался установить переменные для января и февраля, а затем установил, что ввод будет больше, чем первая дата в январе, и меньше, чем первая дата в феврале, но это не сработало. Любая помощь будет принята с благодарностью.
Вот мой html:
<div ng-app="myApp" ng-controller="Catalog">
<div class="bg" ng-repeat="book in books">
<div ng-show=" book.doc.date | mydate" >
<div class="date">{{book.doc.date}}</div>
<div class="title">{{book.doc.title}}</div>
<div class="quote">{{book.doc.quote}}</div>
<div class="attribution">-{{book.doc.attribution}}</div>
<div class="textt">{{book.doc.text}}</div>
<div style="height:10px"></div>
</div>
</div>
<div class="bg" ng-repeat="book in books ">
<div ng-click="showInfo = !showInfo" ng-show=" book.doc.date | January">
<div class="date">{{book.doc.date}}</div>
<div class="title">{{book.doc.title}}</div>
<div class="quote" ng-show="showInfo">{{book.doc.quote}}</div>
<div class="attribution" ng-show="showInfo">- {{book.doc.attribution}}</div>
<div class="textt" ng-show="showInfo">{{book.doc.text}} </div>
<div style="height:10px"></div>
</div>
</div>
</div>
и мой JS:
var myApplication = angular.module('myApp', ['ngColorThis']);
myApplication.controller("Catalog", function ($scope) {
$scope.books = books;
$scope.showInfo = false;
})
.filter('mydate', function() {
return function(input) {
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0, so always add + 1
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
today = mm + '/' + dd;
return (input == today)
}
})
.filter('past', function() {
return function(input) {
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0, so always add + 1
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
today = mm + '/' + dd;
return (input)
}
})
.filter('January', function() {
return function(input) {
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0, so always add + 1
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
today = mm + '/' + dd;
var jan = 00 + "/" +00;
var feb = 01 + "/" + 00;
return (input > jan && input < feb)
}
});
Также здесь полный плункер моего проекта.
Самый простой способ сделать работу с January
фильтром - это:
.filter('January', function() {
return function(input) {
return input.slice(0,2) === '01';
}
});
Как вы можете видеть, все, что нужно, - это простое сравнение первых двух цифр.
Конечно, вы также можете просто вставить это в выражение:
ng-show="book.doc.date.indexOf('01') == 0"
Еще лучше, используйте ng-if
вместо ng-show
или фильтруйте массив перед отображением всех необходимых предметов.
вы должны использовать filter
в своем выражении фильтра
<div ng-show=" book.doc.date | filter: mydate" >
а также
<div ng-click="showInfo = !showInfo" ng-show=" book.doc.date | filter: January">