it-swarm.com.ru

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

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

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

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

Введите $ filter в ваш контроллер

function myCtrl($scope, $filter)
{
}

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

$filter('filtername');

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

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

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

1030
JSAddict

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

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

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

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

247
pkozlowski.opensource

Используя следующий пример кода, мы можем фильтровать массив в контроллере angular по имени. это основано на следующем описании. 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

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example - example-example96-production</title>


  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.3/angular.min.js"></script>
  <script src="script.js"></script>



</head>
<body ng-app="FilterInControllerModule">
    <div ng-controller="FilterController as ctrl">
    <div>
      All entries:
      <span ng-repeat="entry in ctrl.array">{{entry.name}} </span>
    </div>
    <div>
      Filter By Name in angular controller
      <span ng-repeat="entry in ctrl.filteredArray">{{entry.name}} </span>
    </div>
  </div>
</body>
</html>
77
aamir sajjad

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

$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.");

Просто, эй?

47
Mike Gledhill

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

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

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);

});

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


Назначьте $filtervariable

Эта опция позволяет вам использовать $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);

});

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

34
Jeffrey Roosendaal
function ngController($scope,$filter){
    $scope.name = "aaaa";
    $scope.age = "32";

     $scope.result = function(){
        return $filter('lowercase')($scope.name);
    };
}

Имя второго аргумента метода контроллера должно быть "$ filter", тогда только функции фильтра будут работать с этим примером. В этом примере я использовал "строчный" фильтр.

15
Ipog

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

Я получаю массив со значением-описание, как это

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 (контроллер):

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

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

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

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

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

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

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

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

7
Hazarapet Tunanyan

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

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

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

Например:

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

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

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

Как объяснено здесь - https://stackoverflow.com/a/20131782/26214

2
AVH

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

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

Прежде всего, вставьте $ filter в ваш контроллер, убедившись, что ngSanitize загружен в ваше приложение, а позже при использовании контроллера вы увидите следующее:

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

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

1
serdarsenay

если вы хотите фильтр объекта в контроллере попробуйте это

var rateSelected = $filter('filter')($scope.GradeList, function (obj) {
                        if(obj.GradeId == $scope.contractor_emp.save_modal_data.GradeId)
                        return obj;
                });

Это вернет отфильтрованный объект в соответствии с если условие

0
Code Spy