Я пытаюсь создать приложение для расчета налога, используя angular.js в качестве учебного пособия, чтобы понять структуру. Первое, что я заметил, это то, что пользовательский ввод по умолчанию считается строкой, что, очевидно, делает функцию суммирования конкатенацией строк, а не числовой операцией, см. здесь:
var taxApp = angular.module('taxApp', []);
taxApp.controller('taxController', function($scope) {
$scope.user_data = {
income_1: 0.00,
income_2: 0.00
};
$scope.total = function() {
return $scope.user_data.income_1 + $scope.user_data.income_2;
};
});
Я мог бы добавить parseFloat для каждого атрибута, но дело в том, что мое приложение в конечном итоге будет иметь около 10-20 пользовательских полей ввода и от 5 до 10 вычислений. Я хочу избежать многократного повторения parseFLoat повсюду в коде контроллера. Пока что я получил что-то подобное только с помощью ng-change:
...
$scope.parseFLoat = function(model) {
$scope.user_data[model] = parseFloat($scope.user_data[model]);
};
...
Что мне не нравится, так это то, что мне все еще нужно передать имя переменной, так что это слишком зависит от имени модели.
Есть ли более разумный способ добиться того, чего я хочу, возможно, с помощью директив? Или, может быть, в Angular есть встроенная функция для изменения типов значений?