Как использовать фильтр в controllerе?

Я написал функцию фильтра, которая будет возвращать данные на основе аргумента, который вы передаете. Я хочу иметь такую ​​же функциональность в своем controllerе. Можно ли повторно использовать функцию фильтра в controllerе?

Это то, что я пробовал до сих пор:

function myCtrl($scope,filter1) { // i simply used the filter function name, it is not working. } 

Вложить фильтр $ в controller

 function myCtrl($scope, $filter) { } 

Затем, где бы вы ни захотели использовать этот фильтр, просто используйте его так:

 $filter('filtername'); 

Если вы хотите передать аргументы этому фильтру, сделайте это, используя отдельные круглые скобки:

 function myCtrl($scope, $filter) { $filter('filtername')(arg1,arg2); } 

Где arg1 – это массив, который вы хотите фильтровать, а arg2 – объект, используемый для фильтрации.

Ответ, предоставленный @Prashanth, верен, но есть еще более простой способ сделать то же самое. В основном вместо того, чтобы вводить зависимость $filter и использовать неудобный синтаксис его вызова ( $filter('filtername')(arg1,arg2); ) можно ввести зависимость: имя фильтра плюс суффикс Filter .

Взяв пример из вопроса, можно было написать:

 function myCtrl($scope, filter1Filter) { filter1Filter(input, arg1); } 

Следует отметить, что вы должны присоединить Filter к имени фильтра, независимо от того, какое соглашение об именах вы используете: foo ссылается на вызов fooFilter
fooFilter ссылается на вызов fooFilterFilter

Используя следующий пример кода, мы можем фильтровать массив в угловом controllerе по имени. это основано на следующем описании. http://docs.angularjs.org/guide/filter

this.filteredArray = filterFilter (this.array, {name: ‘Igor’});

JS:

  angular.module('FilterInControllerModule', []). controller('FilterController', ['filterFilter', function(filterFilter) { this.array = [ {name: 'Tobias'}, {name: 'Jeff'}, {name: 'Brian'}, {name: 'Igor'}, {name: 'James'}, {name: 'Brad'} ]; this.filteredArray = filterFilter(this.array, {name:'Igor'}); }]); 

HTML

     Example - example-example96-production     
All entries: {{entry.name}}
Filter By Name in angular controller {{entry.name}}

Вот еще один пример использования filter в угловом controllerе:

 $scope.ListOfPeople = [ { PersonID: 10, FirstName: "John", LastName: "Smith", Sex: "Male" }, { PersonID: 11, FirstName: "James", LastName: "Last", Sex: "Male" }, { PersonID: 12, FirstName: "Mary", LastName: "Heart", Sex: "Female" }, { PersonID: 13, FirstName: "Sandra", LastName: "Goldsmith", Sex: "Female" }, { PersonID: 14, FirstName: "Shaun", LastName: "Sheep", Sex: "Male" }, { PersonID: 15, FirstName: "Nicola", LastName: "Smith", Sex: "Male" } ]; $scope.ListOfWomen = $scope.ListOfPeople.filter(function (person) { return (person.Sex == "Female"); }); // This will display "There are 2 women in our list." prompt("", "There are " + $scope.ListOfWomen.length + " women in our list."); 

Просто, эй?

Существует три возможных способа сделать это.

Предположим, у вас есть следующий простой фильтр, который преобразует строку в верхний регистр с параметром только для первого символа.

 app.filter('uppercase', function() { return function(string, firstCharOnly) { return (!firstCharOnly) ? string.toUpperCase() : string.charAt(0).toUpperCase() + string.slice(1); } }); 

Непосредственно через $filter

 app.controller('MyController', function($filter) { // HELLO var text = $filter('uppercase')('hello'); // Hello var text = $filter('uppercase')('hello', true); }); 

Примечание. Это дает вам доступ ко всем вашим фильтрам.


Назначить $filter variable

Этот параметр позволяет использовать $filter как function .

 app.controller('MyController', function($filter) { var uppercaseFilter = $filter('uppercase'); // HELLO var text = uppercaseFilter('hello'); // Hello var text = uppercaseFilter('hello', true); }); 

Загрузите только определенный Filter

Вы можете загрузить только определенный фильтр, добавив имя Filter .

 app.controller('MyController', function(uppercaseFilter) { // HELLO var text = uppercaseFilter('hello'); // Hello var text = uppercaseFilter('hello', true); }); 

Какой из них вы используете лично, но я рекомендую использовать третий, потому что это наиболее читаемый вариант.

 function ngController($scope,$filter){ $scope.name = "aaaa"; $scope.age = "32"; $scope.result = function(){ return $filter('lowercase')($scope.name); }; } 

Имя метода controllerа 2-го аргумента должно быть «$ filter», тогда только этот фильтр будет работать с этим примером. В этом примере я использовал фильтр «нижний регистр».

У меня есть другой пример, который я сделал для своего процесса:

Я получаю массив со значением-Описание, подобным этому

 states = [{ status: '1', desc: '\u2713' }, { status: '2', desc: '\u271B' }] 

в моем Filters.js:

 .filter('getState', function () { return function (input, states) { //console.log(states); for (var i = 0; i < states.length; i++) { //console.log(states[i]); if (states[i].status == input) { return states[i].desc; } } return '\u2718'; }; }) 

Затем тестовый var (controller):

 function myCtrl($scope, $filter) { // .... var resp = $filter('getState')('1', states); // .... } 

AngularJs позволяет использовать фильтры внутри шаблона или внутри controllerа, директивы и т. Д.

в шаблоне вы можете использовать этот синтаксис

 {{ variable | MyFilter: ... : ... }} 

и внутри controllerа вы можете использовать инъекцию службы $ filter

 angular.module('MyModule').controller('MyCtrl',function($scope, $filter){ $filter('MyFilter')(arg1, arg2); }) 

Если вам нужно больше с демонстрационным примером, вот ссылка

Примеры фильтров AngularJs и демонстрационная версия

Существует еще один способ оценить фильтры, которые отражают синтаксис представлений. Вызов волосатый, но вы можете создать ярлык для него. Мне нравится, что синтаксис строки идентичен тому, что у вас было бы в представлении. Выглядит так:

 function myCtrl($scope, $interpolate) { $scope.$eval($interpolate( "{{ myvar * 10 | currency }} dollars." )) } 

Кажется, никто не упомянул, что вы можете использовать функцию arg2 в $ filter (‘filtername’) (arg1, arg2);

Например:

 $scope.filteredItems = $filter('filter')(items, function(item){return item.Price>50;}); 

Пример простой даты с использованием $ filter в controllerе:

 var myDate = new Date(); $scope.dateAsString = $filter('date')(myDate, "yyyy-MM-dd"); 

Как поясняется здесь: https://stackoverflow.com/a/20131782/262140

Используйте ниже код, если мы хотим добавить несколько условий вместо одного значения в javascript-угловом фильтре:

 var modifiedArray = $filter('filter')(array,function(item){return (item.ColumnName == 'Value1' || item.ColumnName == 'Value2');},true) 

Прежде всего, добавьте фильтр $ filter к controllerу, убедившись, что ngSanitize загружен в ваше приложение, а затем в течение использования controllerа:

 $filter('linky')(text, target, attributes) 

Всегда проверяйте документы angularjs

Interesting Posts

Как я могу отформатировать вывод команды bash в аккуратных столбцах

Группировка по значению объекта, подсчет, а затем установка группового ключа с помощью максимального атрибута объекта

Японский текст показывает квадраты на окнах 7

Понимание .AsEnumerable () в LINQ to SQL

как отправить несколько данных с помощью $ .ajax () jquery

Подключение VNC: обход брандмауэра с использованием VPS

Есть ли способ указать, сколько символов строки будет распечатываться с помощью printf ()?

Как вставить нулевой символ (ASCII 00) в блокнот?

AngularJS: Где использовать обещания?

Как загрузить Google Doodle для использования в автономном режиме?

Синхронизация календаря Outlook 2010 с веб-сайтом Sharepoint 2010

Свойство OutputPath не установлено для этого проекта

Лучший способ защитить рабочий стол от силовой нагрузки / грязной мощности?

Как я могу заставить свой ноутбук использовать NVIDIA вместо Intel?

Защита паролем Bios

Давайте будем гением компьютера.