angular.js фильтр по месяцам

0

Я пытаюсь создать фильтр, который будет отображать только записи 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)
}
});

Также здесь полный плункер моего проекта.

Теги:

2 ответа

1
Лучший ответ

Самый простой способ сделать работу с 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 или фильтруйте массив перед отображением всех необходимых предметов.

1

вы должны использовать filter в своем выражении фильтра

<div ng-show=" book.doc.date | filter: mydate" >

а также

<div ng-click="showInfo = !showInfo" ng-show=" book.doc.date | filter: January">

Ещё вопросы

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