2014-09-24 4 views
3

Я пишу настраиваемый фильтр, чтобы заменить значение нуля на «-» для отображения. Однако, если он не равен нулю, он должен возвращать ввод, но фильтроваться как валюта. Когда я попробовал это, я получил неожиданную ошибку токена.AngularJS: применение фильтра валют для возврата значения настраиваемого фильтра

angular.module('app') 
     .filter('displaynullcurrency', function(){ 
      return function(input){ 
       if(!input){ return ' - '; } 
       if(parseFloat(input) != 0){ 
        return {{input | currency}}; 
       } 
       return ' - '; 
      }; 
     }); 
+2

Почему вы используете двойной кронштейн '{{}}' обозначение там? Вы не можете этого сделать. – matthewpavkov

ответ

5

При попытке использовать $filter внутри яваскрипта функции вы должны использовать его как это: $filter('currency')(input), синтаксис, который вы используете в функции зарезервирован для шаблонов, попробуйте вместо этого:

angular.module('app') 
     .filter('displaynullcurrency', function($filter){ 
      return function(input){ 
       if(!input){ return ' - '; } 
       if(parseFloat(input) != 0){ 
        return $filter('currency')(input); 
       } 
       return ' - '; 
      }; 
     }); 
+0

@downvotter не могли бы вы объяснить, пожалуйста, проголосовать? Благодаря! – Josep

+0

Я знаю, что была нисходящая линия, потому что я проголосовал за ответ, но общая сумма равна 0. Однако мне было интересно, как вы знали, что есть понижение. Есть ли где-нибудь на SO или где-то на этой странице, где говорится, что есть downvotes? Мне просто интересно узнать. И несмотря на downvote, я оценил ваш ответ ... спасибо! – jgravois

+0

@jgravois Я знаю его двумя способами: 1) Сначала я получил уведомление, в котором говорилось, что я получил голосование, а позже, когда я пришел посмотреть, была ли какая-то обратная связь от вас, я увидел, что мой ответ имел оценку 0. 2) Как только вы достигнете репутации 1000, вы получите это право: http://stackoverflow.com/help/privileges/established-user, который позволяет вам видеть разбивку голосов по-вверх/вниз по любым вопрос или ответ;) – Josep

4

Вы пытаетесь передать значение в директиве внутри оператора привязки. Вы можете сделать это только в своих шаблонах.

Чтобы вернуть значение входного отфильтрованной валюты, вы должны сделать что-то вроде этого:

angular.module('app') 
    .filter('displaynullcurrency', function($filter) { 
    return function (input) { 
     if (!input) { return ' - '; } 
     if (parseFloat(input) != 0) { 
     return $filter('currency')(input); 
     } 
     return ' - '; 
    }; 
    }); 
+0

Да, но мы действительно не знаем, что OP хочет с этим сделать, поэтому я позволил этому, поскольку это была большая проблема. ошибка маркера я думаю :) –

Смежные вопросы