Anees Hikmat Abu Hmiad
Anees Hikmat Abu Hmiad

Reputation: 3560

When Invoke Filter by js in angular its return null

Im new in Angular, And Im try to Using filter by JavaScript in angularJS, But Im get null..

app.controller('aneesFilters', function($filter){
    this.filterItem = filterItems;
    this.filterJSItem = $filter('currency')(filterItems, 'price');

});

var filterItems = [
    {price: 1254},
    {price: 154},
    {price: 963},
    {price: 1880},
];

html code:

    <div ng-controller="aneesFilters as filter">
        <div ng-repeat="item in filter.filterItem">
            <div>{{item.price | currency}}</div>
            <div>{{item.price | currency:"JOD"}}</div>
            <div>{{item.price | currency:"JOD":0}}</div>
            <hr />
        </div>

        <h2>By javascript (Used filter in controller)</h2>
        <div ng-repeat="item in filter.filterJSItem">
            <div>{{item.price}}</div>
            <hr />
        </div>
    </div>

surly, code work when Im using filter on Expression, problem was happened when call FilterJsItem ..

thanks a lot.

Upvotes: 1

Views: 65

Answers (2)

Parthipan S
Parthipan S

Reputation: 180

app.controller('aneesFilters', function($filter){
    this.filterItem = filterItems;
    this.filterJSItem = $filter('currency')(filterItems.price);

});

Upvotes: 0

adt
adt

Reputation: 4360

I've created a plunker here

Basically I've created another filter which uses currency filter and works on array modifies it and returns filtered array.

// Code goes here

var app = angular.module("app", []);

app.filter('currenyArray',  function($filter) {
  return function(input, format, prop) { 
    input = input || [];
    var out = angular.copy(input);

    for (var i = 0; i < input.length; i++) {
      var p = $filter('currency')(input[i][prop],format);

      out[i][prop] = p;
       console.log( input[i][prop])
    }
    return out; 
  };
})

app.controller('myCtrl', function($filter, $scope){

  $scope.filterItem = [
    {price: 1254},
    {price: 154},
    {price: 963},
    {price: 1880},
];    



$scope.filterJS2 = $filter('currenyArray')($scope.filterItem, 'USD', 'price');

});

Upvotes: 1

Related Questions