В том же контроллере, который вы определили $scope.monthYr
, введите angularJs $filter
и выполните следующие действия:
$scope.filterMounthYr = function() {
// $scope.search is the input value
$scope.monthYr = $filter('filter')($scope.monthYr, $scope.search);
}
Если у вас возникли проблемы с пониманием кода, оставьте комментарий, и я отвечу.
Проверьте это Codepen
Обновление
Поскольку вы прокомментировали месяцы в списке, это числа, но входное значение - String.Поэтому я думаю, что вы должны пойти на JS встроенный метод filter
.
$scope.filteredMonthYr = $scope.monthYr
$scope.filterMonthYr = function() {
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
// Trim the serached word
var search = $scope.search.trim()
// Check if the month list contains
if (monthNames.includes(search)) {
$scope.searchKey = String(monthNames.indexOf(search) + 1);
} else {
$scope.searchKey = search;
}
// Only return if one of the contditions stated is true
$scope.filteredMonthYr = $scope.monthYr.filter(function(o) {
return (o["month"] == $scope.searchKey) ||
(o["year"] == $scope.searchKey) || ($scope.searchKey in o)
})
}
Полный код.
angular
.module('MonthYearApp', [])
.controller("MonthYearController", function MonthYearController($scope) {
$scope.monthYr = [{
month: "1",
year: "2014"
}, {
month: "2",
year: "2015"
}, {
month: "3",
year: "2016"
}, {
month: "4",
year: "2016"
}, {
month: "5",
year: "2016"
}, {
month: "6",
year: "2016"
}]
$scope.filteredMonthYr = $scope.monthYr
$scope.filterMonthYr = function() {
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
// Trim the serached word
var search = $scope.search.trim()
// Check if the month list contains
if (monthNames.includes(search)) {
$scope.searchKey = String(monthNames.indexOf(search) + 1);
} else {
$scope.searchKey = search;
}
// Only return if one of the conditions is true
$scope.filteredMonthYr = $scope.monthYr.filter(function(o) {
return (o["month"] == $scope.searchKey) ||
(o["year"] == $scope.searchKey) || ($scope.searchKey in o)
})
}
}).filter('monthName', [function() {
return function(monthNumber) {
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
return monthNames[monthNumber - 1];
}
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.10/angular.min.js"></script>
<div ng-app="MonthYearApp">
<div ng-controller="MonthYearController">
<input type='text' data-ng-model='search'>
<button ng-click='filterMonthYr()'>Filter</button>
<table>
<tr data-ng-repeat="item in filteredMonthYr">
<td> {{item.month | monthName}} </td>
<td>{{item.year}}</td>
</tr>
</table>
</div>
</div>
Этот код не работает, если вы вводите как месяц, так и год.Вы должны реализовать эту функцию самостоятельно.Это довольно просто.
Обновление
Использование ng-change
и оператора if-else
внутри функции filterMonthYr
.
angular
.module('MonthYearApp', [])
.controller("MonthYearController", function MonthYearController($scope) {
$scope.monthYr = [{
month: "1",
year: "2014"
}, {
month: "2",
year: "2015"
}, {
month: "3",
year: "2016"
}, {
month: "4",
year: "2016"
}, {
month: "5",
year: "2016"
}, {
month: "6",
year: "2016"
}]
$scope.filteredMonthYr = $scope.monthYr
$scope.filterMonthYr = function() {
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
// Trim the serached word
var search = $scope.search.trim()
// Check if the month list contains
if (monthNames.includes(search)) {
$scope.searchKey = String(monthNames.indexOf(search) + 1);
} else {
$scope.searchKey = search;
}
// Only return if one of the conditions is true
var monthYr = $scope.monthYr.filter(function(o) {
return (o["month"] == $scope.searchKey) ||
(o["year"] == $scope.searchKey) || ($scope.searchKey in o)
})
if (monthYr.length > 0) {
$scope.filteredMonthYr = monthYr
} else {
$scope.filteredMonthYr = $scope.monthYr
}
}
}).filter('monthName', [function() {
return function(monthNumber) {
var monthNames = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
return monthNames[monthNumber - 1];
}
}])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.10/angular.min.js"></script>
<div ng-app="MonthYearApp">
<div ng-controller="MonthYearController">
<input type='text' data-ng-model='search' ng-change="filterMonthYr()">
<button ng-click=''>Filter</button>
<table>
<tr data-ng-repeat="item in filteredMonthYr">
<td> {{item.month | monthName}} </td>
<td>{{item.year}}</td>
</tr>
</table>
</div>
</div>