Search code examples
angularjsangularjs-filter

Why AngularJS custom filter not working?


I'm using angular.min.js file (AngularJS v1.6.4)

And I'm trying to implement a simple filter that reverses a string.

Here is my code:

main.js:

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

app.filter('reverse', function () {
   return function (item) {
       item.split("").reverse().join("");
   };
});

app.controller("MyController", function ($scope) {
    $scope.data = {
        message: ""
    };

    $scope.reversedMessage = function (message) {
        return message.split("").reverse().join("");
    }
});

index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>AngularJS Blackbox</title>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    <link rel="stylesheet" href="css/bootstrap-theme.min.css">
</head>
<body>
<div ng-app="angularBlackbox">
    <div ng-controller="MyController">
        <input type="text" ng-model="data.message">
        <h1>{{ data.message }}</h1>
        <h1>{{ reversedMessage(data.message) }}</h1>
        <h2>{{ data.message | reverse }}</h2>
    </div>
</div>

<script type="text/javascript" src="js/angular.min.js"></script>
<script type="text/javascript" src="main.js"></script>
</body>
</html>

I get such result:

result

So we can see that:

  1. data binding works [OK];
  2. controller's function reversedMessage works [OK];
  3. filter doesn't work [Not OK] (heading <h2>{{ data.message | reverse }}</h2> is not visible)

Why is the custom filter not working?


Solution

  • return formatted output from your filter.

    app.filter('reverse', function () {
       return function (item) {
           //returned reversed string from here.
           return item.split("").reverse().join("");
       };
    });
    

    Check Here