2014-04-23 17 views
7
<div ng-app=""> 
<div ng-controller="MyCtrl"> 
    <input required type="number" ng-model="teams.length" min="1" max="9">  
    <span>pressing backspace to remove the number causes an exception</span> 

    <div ng-repeat="team in teams track by $index"> 
     team {{$index+1}} 
    </div> 
</div> 

RangeError khi đầu vào ràng buộc để array.length

function MyCtrl($scope) { 
    $scope.teams = [{}]; 
} 

nhấn phím lùi trong đầu vào làm cho ngoại lệ:

RangeError: Invalid array length 
at setter (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:9982:12) 
at token.fn.extend.assign (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:9429:18) 
at $setViewValue (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:16390:7) 
at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:15654:14 
at Scope.$eval (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:11576:28) 
at Scope.$apply (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:11676:23) 
at HTMLInputElement.listener (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:15653:13) 
at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:2562:10 
at Array.forEach (native) 
at forEach (http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.1/angular.js:300:11) 

Những gì tôi muốn xảy ra thay vì là dành cho đầu vào không xác thực (ng-invalid). Tôi đang chạy góc 1.2.16

JSFiddle

Trả lời

5

Đừng ràng buộc trực tiếp trên teams.length; thay vì tạo một biến mới, hãy nói length và liên kết với biến đó. Sau đó, $watch và áp dụng các thay đổi cho teams.length, nếu thích hợp. Tận dụng đầu vào ng-required="true":.

<input ng-required="true" type="number" ng-model="length" min="1" max="9" /> 

Và:

function MyCtrl($scope) { 
    $scope.teams = [{}]; 
    $scope.length = $scope.teams.length; 

    $scope.$watch("length", function(newlength) { 
     if(newlength) { 
      $scope.teams.length = newlength; 
     } 
    }); 
} 

Fiddle: http://jsfiddle.net/6pcVN/

+0

Cảm ơn. Bằng cách này là có một lý do cụ thể mà bạn đang chọn ng-required = "true" chỉ đơn giản là "yêu cầu" trong trường hợp này? –

+0

Bạn nói đúng, 'yêu cầu 'có cùng tác dụng; Tôi thích 'ng-required' để được an toàn, nhưng trong trường hợp này nó là thừa. –

Các vấn đề liên quan