2013-11-08 4 views
4

Наличие этой обычной (атрибута name требуется сервером) формы с угловым и не может понять, как сделать валидации работы. Что я должен положить в нг-шоу = "TODO"Проверка вложенной формы в угловом

http://jsfiddle.net/Xk3VB/7/

<div ng-app> 
    <form ng-init="variants = [{duration:10, price:100}, {duration:30, price:200}]"> 
    <div ng-repeat="variant in variants" ng-form="variant_form"> 
     <div> 
     <label>Duration:</label> 
     <input name="variants[{{$index}}][duration]" ng-model="variant.duration" required /> 
     <span ng-show="TODO">Duration required</span> 
     </div> 
     <div> 
     <label>Price:</label> 
     <input name="variants[{{$index}}][price]" ng-model="variant.price" /> 
     <span ng-show="TODO">Price required</span> 
     </div> 
    </div> 
    </form> 
</div> 

пс: это только часть формы, которая является более сложным

Благодаря

ответ

11

AngularJS полагается на входе имена для выявления ошибок проверки.

К сожалению, на сегодняшний день невозможно (без использования пользовательской директивы) динамически генерировать имя ввода. Действительно, проверяя входные документы, мы можем видеть, что атрибут name принимает только строку.

Короче говоря, вы должны положиться на ng-form для проверки динамически создаваемых входов. Что-то вроде:

<div ng-repeat="variant in variants" > 
    <ng-form name="innerForm"> 
    <div> 
     <label>Duration:</label> 
     <input name="duration" ng-model="variant.duration" required /> 
     <span ng-show="innerForm.duration.$error.required">Duration required</span> 
    </div> 
    <div> 
     <label>Price:</label> 
     <input name="price" ng-model="variant.price" required/> 
     <span ng-show="innerForm.price.$error.required">Price required</span> 
    </div> 
    </ng-form> 

Работа скрипку here

UPDATE: Base на вашем требовании стороне сервера почему бы не сделать что-то вроде этого:

<input type="hidden" name="variants[{{$index}}][duration]" ng-model="variant.duration"/> 
<input name="duration" ng-model="variant.duration" required /> 

Скрытое вход будет одним прочитан сервером время другой будет использоваться для проверки на стороне клиента (позже отбрасывается сервером). Это своего рода взлом, но он должен работать.

PS: Убедитесь, что ваша форма действительна до фактического ее представления. Может быть сделано с ng-submit

+0

Это нормально и работает для меня, но невозможно реализовать. Существовал и до сих пор есть некоторые именования convetion, который принимает сервер, и приложения для этого созданы:/ – Schovi

+0

Это будет прекрасно, если угловой может поддерживать 'ng-name', который будет принят для валидации, а' name' - просто имя html :) – Schovi

+0

Как упоминалось в моем редактировании со скрытым вводом, вы должны иметь возможность получить как угловую проверку, так и соответствие вашему серверному коду. –

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