2016-07-13 24 views
0

数字のみを受け取り、いくつかの追加オプションがあります。しかし、それを実行した後、私はある選択肢の一つにrootScopeエラーを取得:

<input type="text" ng-model="mynumber" nks-only-number allow-decimal="false" /> 

私は偽の条件は、このエラーが表示されつつあると考えていますが、私は理由を知りません。ここで

デモされています http://jsfiddle.net/RmDuw/896/

コード:

(function(){ 
    angular.module('myApp', []) 
     .directive('nksOnlyNumber', function() { 
     return { 
      restrict: 'EA', 
      require: 'ngModel', 
      link: function (scope, element, attrs, ngModel) { 
       scope.$watch(attrs.ngModel, function(newValue, oldValue) { 
        var spiltArray = String(newValue).split(""); 

        if(attrs.allowNegative == "false") { 
        if(spiltArray[0] == '-') { 
         newValue = newValue.replace("-", ""); 
         ngModel.$setViewValue(newValue); 
         ngModel.$render(); 
        } 
        } 

        if(attrs.allowDecimal == "false") { 
         newValue = parseInt(newValue); 
         ngModel.$setViewValue(newValue); 
         ngModel.$render(); 
        } 

        if(attrs.allowDecimal != "false") { 
        if(attrs.decimalUpto) { 
         var n = String(newValue).split("."); 
         if(n[1]) { 
          var n2 = n[1].slice(0, attrs.decimalUpto); 
          newValue = [n[0], n2].join("."); 
          ngModel.$setViewValue(newValue); 
          ngModel.$render(); 
         } 
        } 
        } 


        if (spiltArray.length === 0) return; 
        if (spiltArray.length === 1 && (spiltArray[0] == '-' || spiltArray[0] === '.')) return; 
        if (spiltArray.length === 2 && newValue === '-.') return; 

        /*Check it is number or not.*/ 
        if (isNaN(newValue)) { 
         ngModel.$setViewValue(oldValue || ''); 
         ngModel.$render(); 
        } 
       }); 
      } 
     }; 
    }); 
}()); 
+0

あなたのJSFiddleはここに掲載されたコードとよく似ていません...そうですか? http://jsfiddle.net: – Sam

+0

は申し訳ありませんが間違っjsfidlleあるdirectlly – Pedro

答えて

0

私は問題を信じては、あなたの貼り付けコード(ない異なるJSFiddle)を見て、ngModel.$render()が二回呼び出されるということです。 attrs.allowDecimal == false条件付きまたはisNaN(newValue)条件付きのいずれかから削除すると、コードはうまく動作します。

あなたの最終目標がわからないので、実際にコードを書き直すことは怠っています。しかし、それはinfinite $digest loopエラーを解決しました。

+0

、申し訳ありませんが、 – Pedro

+0

は、私はすでにそれを試してみましたが、まだ私にエラーを与え、あなたは私が上記の更新このリンクをチェックすることができます私は単にコードを表示するためにここに掲載、同じです/ RmDuw/896/ – Pedro

+0

@MBPP心配なし。もしあなたが[splitArray'と 'isNaN(newValue)'の終わりにあるものをすべて削除したら](http://jsfiddle.net/RmDuw/898/)、うまく動作します。それは良い使用していたかどうかはわかりません(一見一見反復しているようですが、何か不足しているかもしれません)... – Sam

関連する問題