@Worddoc
Frontend explorer

Вопрос по filter в Angular js?

Здравствуйте. Начал изучать Angular по каналу kudvenkat. И одно из его видео вызвало пару вопросов, на которые некому ответить.

В функции search(item) присутствует аргумент item, которые мы нигде не указываем в html разметке, только в js. Вопрос: Как в item попадает какое-либо значение, если мы не указываем, что должно туда попасть?

Функция search(item) возвращает булевое значение. Т.е. в HTML получается 'ng-repeat="elem in obj | filter: TRUE/FALSE">'. Если вставить true или false вручную, а не через функцию, то ничего не работает.
Вопрос: Почему? И почему там МОЖЕТ стоять булевое значение вместо строки?

Спасибо! Ответить на эти вопросы некому, поэтому задаю вам!

SEARCH : <input type="text" ng-model="searchText" placeholder="search">
	<table>
		<thead>
			<tr>
				<th ng-click="sortData('name')">Name<div ng-class="getClass('name')"></div></th>
				<th ng-click="sortData('age')">Age<div ng-class="getClass('age')"></div></th>
				<th ng-click="sortData('country')">Country<div ng-class="getClass('country')"></div></th>
				<th ng-click="sortData('salary')">Salary<div ng-class="getClass('salary')"></div></th>
				<th ng-click="sortData('dateOfBirth')">DateOfBirth<div ng-class="getClass('dateOfBirth')"></div></th>
			</tr>
		</thead>
		<tbody>
			<tr ng-repeat="elem in obj | filter:search">
				<td>{{elem.name }}</td>
				<td>{{elem.age}}</td>
				<td>{{elem.country }}</td>
				<td>{{elem.salary | currency: $ : 0}}</td>
				<td>{{elem.dateOfBirth | date:"dd/MM/yy"}}</td>
			</tr>
		</tbody>
	</table>


var obj = [
		{name: 'John',age: 15,country: 'Usa',salary: 33000, dateOfBirth: new Date ('September 09,1996')},
		{name: 'Mary', age: 28, country: 'Russia', salary: 21000, dateOfBirth: new Date ('September 09,1996')},
		{name: 'Alex', age: 21, country: 'Romania', salary: 53300, dateOfBirth: new Date ('September 09,1996')},
		{name: 'Zondo', age: 33, country: 'Italy', salary: 22660, dateOfBirth: new Date ('September 09,1996')}
	];

	$scope.obj = obj;

$scope.search = function(item) {
		if($scope.searchText == undefined) {
			return true;
		}
		else {
			if(item.name.toLowerCase().indexOf($scope.searchText.toLowerCase()) != -1 || item.country.toLowerCase().indexOf($scope.searchText.toLowerCase()) != -1) {
				return true;
			}
		}
		return false;
	}
  • Вопрос задан
  • 399 просмотров
Пригласить эксперта
Ответы на вопрос 1
AMar4enko
@AMar4enko
Мое мнение, что им бы стоило выкинуть filter вообще в версии эдак 1.3
Он привносит дополнительную ненужную абстракцию, с ним нужно четко понимать, что это не магия. Опыт его использования применим только к ангуляру.
Нет никакой проблемы сделать дополнительное состояние для хранения фильтрованной коллекции и выводить уже ее. Обновлять ее при наступлении каких-то событий (типа изменения данных формы и.т.д)
Я в своей практике (а она довольно обширная) использовал filter только в самом начале.
У вас есть шанс избежать этого и потратить время на изучение действительно фундаментальных вещей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы