Как я могу удалить currency в директиве Angularjs?

#javascript #angularjs #angularjs-directive #angularjs-scope

#javascript #angularjs #angularjs-директива #angularjs-scope

Вопрос:

Я использую директиву для отображения денег в надлежащем формате с этого URLhttp://jsfiddle.net/ExpertSystem/xKrYp /

Кто-нибудь знает, как я могу удалить символ $ из выходного значения и конвертировать только фактическую сумму?

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

Вот директива, а также:

 app.directive('realTimeCurrency', function ($filter, $locale) {
    var decimalSep = $locale.NUMBER_FORMATS.DECIMAL_SEP;
    var toNumberRegex = new RegExp('[^0-9\'   decimalSep   ']', 'g');
    var trailingZerosRegex = new RegExp('\'   decimalSep   '0 $');
    var filterFunc = function (value) {
        return $filter('currency')(value);
    };

    function getCaretPosition(input){
        if (!input) return 0;
        if (input.selectionStart !== undefined) {
            return input.selectionStart;
        } else if (document.selection) {
            // Curse you IE
            input.focus();
            var selection = document.selection.createRange();
            selection.moveStart('character', input.value ? -input.value.length : 0);
            return selection.text.length;
        }
        return 0;
    }

    function setCaretPosition(input, pos){
        if (!input) return 0;
        if (input.offsetWidth === 0 || input.offsetHeight === 0) {
            return; // Input's hidden
        }
        if (input.setSelectionRange) {
            input.focus();
            input.setSelectionRange(pos, pos);
        }
        else if (input.createTextRange) {
            // Curse you IE
            var range = input.createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }
    }

    function toNumber(currencyStr) {
        return parseFloat(currencyStr.replace(toNumberRegex, ''), 10);
    }

    return {
        restrict: 'A',
        require: 'ngModel',
        link: function postLink(scope, elem, attrs, modelCtrl) {    
            modelCtrl.$formatters.push(filterFunc);
            modelCtrl.$parsers.push(function (newViewValue) {
                var oldModelValue = modelCtrl.$modelValue;
                var newModelValue = toNumber(newViewValue);
                modelCtrl.$viewValue = filterFunc(newModelValue);
                var pos = getCaretPosition(elem[0]);
                elem.val(modelCtrl.$viewValue);
                var newPos = pos   modelCtrl.$viewValue.length -
                                   newViewValue.length;
                if ((oldModelValue === undefined) || isNaN(oldModelValue)) {
                    newPos -= 3;
                }
                setCaretPosition(elem[0], newPos);
                return newModelValue;
            });
        }
    };
});
  

Комментарии:

1. Для наглядности вы хотите, чтобы textcontrol не показывал знак $?

2. @defaultcheckbox правильный

Ответ №1:

Попробуйте https://github.com/bcherny/format-as-currency 🙂

Или, если вы хотите использовать свою собственную версию, передайте пустую строку в качестве второго аргумента currency фильтра. Смотрите https://docs.angularjs.org/api/ng/filter/currency

Комментарии:

1. Спасибо, сейчас пробую твою

2. Могу ли я полностью удалить валюту из вашей директивы?

3. Да, посмотрите на этот пример, но используйте пустую строку вместо Yuan. github.com/bcherny /…

4. <тип ввода = «text» class=»form-control» ng-model=»LoanDetailsVM.loanAmount» форматирование в виде валюты currency-filter =»» заполнитель =»Сумма кредита»> это то, что я ввел, но я все равно получаю знак доллара.

5. Определен фильтр валюты, в противном случае он будет использовать встроенный. В вашем пользовательском валютном фильтре установите символ валюты на '' .