2016-07-13 32 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與您在這裏發佈的代碼不太相似......這是正確的嗎? – Sam

+0

是一樣的,我剛剛在這裏顯示代碼directlly – Pedro

回答

0

我相信問題,看你粘貼代碼(而不是不同的jsfiddle),是ngModel.$render()被調用兩次。如果我從attrs.allowDecimal == false條件或結尾isNaN(newValue)有條件刪除它,代碼運行良好。

因爲我不確定你的最終目標是什麼,所以我忽視了實際重寫你的代碼。但是,這解決了infinite $digest loop錯誤。

+0

對不起,是錯誤jsfidlle,對不起, – Pedro

+0

我已經嘗試過,仍然給我的錯誤,你可以檢查這個鏈接我更新以上:http://jsfiddle.net/RmDuw/896/ – Pedro

+0

@ MBPP不用擔心。如果你[在最後刪除了所有'splitArray'和'isNaN(newValue)'東西](http://jsfiddle.net/RmDuw/898/),它工作正常。不知道這是否有很好的用處(乍一看似乎是重複的,但我可能會錯過某些東西)...... – Sam