How do I call an Angular.js filter with multiple arguments?

angularjs

Solution

In templates, you can separate filter arguments by colons.

{{ yourExpression | yourFilter: arg1:arg2:... }}

From Javascript, you call it as

$filter('yourFilter')(yourExpression, arg1, arg2, ...)

There is actually an example hidden in the orderBy filter docs.

Example:

Let's say you make a filter that can replace things with regular expressions:

myApp.filter("regexReplace", function() { // register new filter

  return function(input, searchRegex, replaceRegex) { // filter arguments

    return input.replace(RegExp(searchRegex), replaceRegex); // implementation

  };
});

Invocation in a template to censor out all digits:

<p>{{ myText | regexReplace: '[0-9]':'X' }}</p>

Problem

As from the documentation, we can call a filter such as date like this: ``` {{ myDateInScope | date: 'yyyy-MM-dd' }} ``` Here date is a filter that takes one argument. What is the syntax to call filters with more parameters both from templates and from JavaScript code?

Original source