2013-12-09 10 views
1

Я хочу проверить правильность входного значения (например, если кто-то тратит не менее 25 центов на конфету из списка конфет), а если нет, пометьте этот ввод как $ недействительно, поэтому форма не представляется.AngularJS: SetValidity в ng-repeat

<form novalidate name="candyForm"> 
    <div ng-repeat="candy in candies"> 
     <input name="candyCost" type="text" ng-model="candy.cost" required> 
     <div class="error" ng-show='checkEnoughMoney()'>You only have 1 dollar to spend</div> 
     <div class="error" id="candyError{{$index}}">You must spend at least 25c per candy</div> 
    </div> 
</form> 

checkEnoughMoney() является:

$scope.checkEnoughMoney = function() { 
    var total = 0; 
    for(var i = 0; i < $scope.candies.length; i++) { 
     var amount = parseFloat($scope.sweets[i].cost) || 0; 
     total = total + amount; 
     if((parseFloat(amount) >= 25) && (parseFloat(amount) <= 100)) { 
      $("#candyError" + i).hide(); 
     } 
     else { 
      $("#candyError" + i).show(); 
     } 
    } 
    if(total > 100) { 
     $scope.candyForm.candyCost.$setValidity('candyForm.candyCost',false); 
     return true; 
    } 
    else { 
     $scope.candyForm.candyCost.$setValidity('candyForm.candyCost',true); 
     return false; 
    } 
}; 

Установка $ scope.candyForm.candyCost истинных или ложных работ здесь, как это влияет на все случаи, если конфеты, это здорово, так как он должен к. Но как я могу сделать один экземпляр недействительным, если человек ввел менее 25 центов или более 100 центов?

Как вы можете видеть, я обманул, чтобы показать 25> = стоимость> = 100 сообщений, когда они должны, но форма все равно отправляется, так как вход не установлен на недействительный. Если я попробую $ scope.candies [index] .setValidity («cost», false), он выдает ошибку, поскольку родительская область не может получить доступ к области внутри ng-repeat. Есть ли способ обойти это?

ответ

1

Вот пример обработки форм в Angular, который должен заботиться о вашей проблеме.

http://docs.angularjs.org/cookbook/advancedform

Я предпочитаю настроить Fn контроллера для обработки запросов и передавать их через службу.

+0

Cheers. Это то, что мне нужно. Он также решил следующую проблему, которую я должен был иметь. Хотел бы я пометить это дважды! :) – Jezcentral

+1

Ссылка сейчас мертва. Можно ли найти эту информацию в другом месте? – Scheintod

Смежные вопросы