2016-10-12 19 views
1

私はこれを理解するためにしばらく時間をとったが、誰かが入力タイプ=数字の桁数を制限するためのよりクリーンな方法を投稿することができる。問題の1つは、$ scope.variable = nullの場合にエラーがスローされるということです。入力フィールドには何も意味しません。入力タイプ番号のmaxLengthを防ぐ

<input type="number" model='modalName' ng-change="monitorLength('modalName',16)"> 

JS:私はその後、防止、数だけを考慮して、この上に展開する必要

$scope.monitorLength = function (model,maxLength) { 
    if ($scope[model] != null) { // prevent error on empty input field 
     var len = $scope[model].toString() ; // convert to a string 
     if (len.length > maxLength) { //evaluate string length 
     $scope[model] = parseInt(len.substring(0, maxLength)); 
     // convert back to number or warning is thrown on input value not being a number 
     } 
    } 
    } 

任意の数字以外の文字が含まれます「」 '、'記号:

var reg = new RegExp(/^\d+$/) ; 
    $scope.monitorLength = function (modal,maxLength) { 
    if ($scope[modal] != null) { 
     var len = $scope[modal].toString() ; 
     if (len.length > maxLength) { 
     $scope[modal] = parseInt(len.substring(0, maxLength)); 
     } else if (!reg.test(len)) { 
     $scope[modal] = parseInt(len.substring(0, len.length-2)); 
     } 
    } 
    } 

ng-changeを呼び出すng-modalを抽出する方法はありますか?その呼び出しは、ng-change="monitorLength(10)"でなければなりません。そして、関数内で何とか動的に呼び出すng-modalを取得しますか?

+0

input要素に 'min'と' max' [attributes](http://www.w3schools.com/tags/att_input_max.asp)を使用できますか? – Icepickle

+1

これは要素をラップして$ scopeにバインドするため、特定のHTML入力パラメータが機能しないか、無視されるため、アンギュラではありません。 – rolinger

答えて

0

これはそのためngMaxlengthを使用して、数を制限するためのクリーナー方法である:

<input type="number" model='modalName' ng-maxlength="16"> 

あなたはより多くの属性や情報here

+0

リンクするページが示唆しているように 'ng-maxlength'ではありませんか? – Icepickle

+0

申し訳ありませんが、グラフの貼り付けを貼り付けました。あなたはそのng-maxlengthが正しいです。 –

+2

いいえ、ng-maxlengthは実際には16文字以上を入力できません。 $ scope.variableには16文字しか格納されませんが、視覚的には16文字以上は表示されます。上記は、実際の入力フィールドでの文字のランナウトを防止する方法です。 – rolinger

0

を見つけることができますngのモーダルを抽出する方法はありますng変更を呼び出す責任がありましたか?

はい。ディレクティブを定義して、ngModelControllerが必要です。 @rolingerとして

.directive('maxNum', function(){ 
    return { 
     require: '^ngModel', 
     link: function($scope, elem, attrs){ 
      // here you can add formatters/parsers to the ngModel 
      // to affect the change on the ngModel.$viewValue. 

     } 
    } 
}) 

は、非有効な文字を入力することから使用を防ぐことはできませんディレクティブに建てられ、彼らは単に無効であるとしてモデルをマーク使用して、他の回答で述べました。

関連する問題