#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. Определен фильтр валюты, в противном случае он будет использовать встроенный. В вашем пользовательском валютном фильтре установите символ валюты на
''
.