このフィドルをチェックしてください:http://jsfiddle.net/bwjbz/6/
私は正の整数を厳密に強制しようとしています。私はいくつかの方法を試しましたが、探しているものが得られないようです。(数回試してみると、入力に数字以外の数字または負の数が残ってしまう可能性があります)。
上記のフィドルに加えて、数値フィルターを使用して、独自のディレクティブを作成してみました。
数値フィルター:
<input type="number" min="0" max="1000" value="{{itm.qty | number:0}}" required data-ng-model="itm.qty" data-ng-change="setQty()" data-whole-number>
data-whole-numberディレクティブに気付くでしょう。私はまだディレクティブに完全に慣れていませんが、これはそれです:
app.directive('wholeNumber', function() {
return function(scope, elem, attrs) {
elem.on("blur", function() {
var num;
num = parseInt(elem.val(), 10);
num = Math.abs(num);
scope.$apply(elem.val(num));
});
};
});
ディレクティブ自体は正しいDOM操作を行いますが、モデルは新しい値で更新されません。
したがって、この質問には2つの側面があります。
フィドルはモデルに正しい値を設定するように機能しますが、モデルのテキストは更新されません。ただし、別の方法では、モデルitmの数量を1に設定すると、モデルと表示値の両方が変更されます。実際にモデルが正しく変更されていることに気付くでしょう(たとえば、値が1.56に設定されている場合、バインディング、フットボールの数= 1に注意してください)。
ディレクティブがモデルへの変更を伝播しないのはなぜですか?
よろしくお願いします、-ブライアン