2016-07-13 15 views
0

숫자 만 받고 추가 옵션이있는 지시문을 다운로드했습니다.

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

내가 거짓 조건이 오류를 표시하고있다 생각하지만, 나는 이유를 알고하지 않습니다하지만, 그것을 실행 한 후 나는있는 옵션 중 하나에 rootScope의 오류가 발생합니다. 여기

데모입니다 : 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

관련 문제