=====Cоздание собственных фильтров=====
Возможно, кому-то набор встроенных фильтров покажется ограниченным. Но разработчики фреймворка предоставляют нам возможность создавать собственные фильтры.
====Определение фильтра====
Фильтр по сути представляет функцию, которая выполняется над переданным значением. Ее типизированное представление выглядит следующим образом:
module.filter('filter_name', function(){
return function(param){
// некоторые действия над param
return some_value;
}
})
В этой конструкции module - название модуля приложения. filter_name - произвольное название функции фильтра. Параметр возвращаемой функции - param - параметр, над которым будут производиться действия. И some_value - некоторое возвращаемое значение. В качестве значения может выступать текст самого параметра или какое-то иное значение. Посмотрим на примере.\\
\\
Для начала создадим модуль в отдельном файле - назовем его **app.js** и положим в папку **js**:
var questApp = angular.module('questApp', []);
Затем изменим контроллер QuestionController:
questApp.controller('QuestionController',
function QuestionController($scope){
$scope.question={
text: 'Какой js-фреймворк лучше использовать?',
author: 'Иван Иванов',
date: '20/10/2013',
answers:
[{
text: 'AngularJS!',
author: 'Вова Сидоров',
date: '20/10/2013',
rate:2
},{
text: 'AngularJS лучше всех',
author: 'Олег Кузнецов',
date: '21/10/2013',
rate:3
},{
text: 'фигасе квестшен',
author: 'Неизвестный',
date: '22/10/2013',
rate:0
}]
},
$scope.voteUp = function (answer){
answer.rate++;
};
$scope.voteDown = function (answer){
answer.rate--;
};
}
)
Теперь создадим фильтр. Его задачей будет фильтрация сообщений, и если сообщение содержит некорректное выражение, то его заменяем звездочками. Для этого создадим отдельный файл **filter.js** в каталоге **js** со следующим содержанием:
questApp.filter('formatText', function(){
return function(text){
if(text.indexOf("фигасе")!==-1){
return "***";
}
else{
return text;
}
}
})
В итоге проект будет выглядеть следующим образом:\\
{{ :angular:angularjs:filters:19.png?200 |}}
И теперь определим html-страницу, где будет происходить все это безобразие:
{{question.text}}
{{question.author}}
{{question.date}}
Ответы
{{answer.rate}}
{{answer.text | formatText}}
{{answer.author}}
{{answer.date}}
И поскольку один из ответов к вопросу содержит некорректное слово, то при выводе оно будет заменяться звездочками:\\
{{ :angular:angularjs:filters:12.png?400 |}}