ng-pattern="/^[0-9]+(\.[0-9]{1,2})?$/"
を使用すると、小数点以下2桁までの数字とドット区切り文字を使用できます。
あなたがより多くの何かをしたい場合は、のようなディレクティブを使用します。
<input currency-input ng-maxlength="10" ng-model="myDecimal" type="text">
あなたはちょうど2つの小数をしたい場合、あなたはどちらかのはず:その後のは言わせて、入力要素にそれを使用
.directive('currencyInput', function ($browser, $filter) {
return {
require: 'ngModel',
link: function ($scope, $element, $attrs, ngModel) {
var listener = function() {
var value = $element.val().replace(/,/g, '');
$element.val($filter('number')(value, 0));
};
// This runs when we update the text field from element
ngModel.$parsers.push(function (viewValue) {
return parseInt(viewValue.replace(/,/g, ''), 10);
});
// This runs when the model gets updated on the scope directly and keeps our view in sync
ngModel.$formatters.push(function (modelValue) {
return modelValue == null || modelValue.length === 0 ? '' : $filter('number')(modelValue, 0);
});
ngModel.$viewChangeListeners = function() {
$element.val($filter('number')(ngModel.$viewValue, 0))
}
$element.bind('change', listener);
$element.bind('keypress', function (event) {
var key = event.which;
// If the keys include the CTRL, SHIFT, ALT, or META keys, or the arrow keys, do nothing.
// This lets us support copy and paste too
if (key === 0 || key === 8 || (15 < key && key < 19) || (37 <= key && key <= 40)) {
return;
}
$browser.defer(listener); // Have to do this or changes don't get picked up properly
});
$element.bind('paste cut', function() {
$browser.defer(listener);
});
}
}
})
数フィルターをハードコーディングまたはディレクティブのパラメータとしてそれを受け取る:
$element.val($filter('number')(value, 2));
は、私はすでにその解決策を試してみましたが、それはあちこちに私を停止することはありません私が欲しいものを書いたら、それはパターンに従わないことを正当化するでしょう、そうですか? –
@RuiQueirósはい。私は編集し、ペースト値をコピーしたり、マスクして所望の結果を得るのに役立つ指令を追加しました。それがあなたを助けることを願っています – Cosmin
@RuiQueirósまた、あなたは、純粋なJavaScriptではなくAngularJSソリューションを探しているというタイトルを述べるべきです。 – Cosmin