У меня такая форма: http://jsfiddle.net/dfJeN/
Как видите, значение имени для входа установлено статически:
name="username"
, проверка формы работает нормально (добавьте что-нибудь и удалите весь текст из ввода, текст должен появиться).
Затем я пытаюсь динамически установить значение имени: http://jsfiddle.net/jNWB8/
name="{input.name}"
Затем я применяю это к своей проверке
login.{{input.name}}.$error.required
(этот шаблон будет использоваться в ng-repeat), но моя проверка формы не работает. Он правильно интерпретируется в моем браузере (если я проверю элемент, который я увидел login.username. $ Error.required).
Любая идея ?
РЕДАКТИРОВАТЬ: после регистрации области в консоли кажется, что
{{input.name}}
выражение не интерполируется. Моя форма как атрибут {{input.name}}, но без имени пользователя.
ОБНОВЛЕНИЕ: Начиная с версии 1.3.0-rc.3 name = "{{input.name}}" работает должным образом. См. # 1404
Ответы:
Вы не можете делать то, что пытаетесь сделать таким образом.
Предполагая, что вы пытаетесь сделать, вам нужно динамически добавлять элементы в форму с чем-то вроде ng-repeat, вам нужно использовать вложенную ng-форму, чтобы разрешить проверку этих отдельных элементов:
К сожалению, это просто плохо задокументированная функция Angular.
источник
Использование вложенной ngForm позволяет вам получить доступ к конкретному InputController из шаблона HTML. Однако, если вы хотите получить к нему доступ с другого контроллера, это не поможет.
например
Я использую эту директиву для решения проблемы:
Теперь вы используете динамические имена везде, где это необходимо, просто атрибут «dynamic-name» вместо атрибута «name».
например
источник
$interpolate
вместо$parse
,<form ng-repeat="item in items" dynamic-name="'item'+item.id"> ... <span ng-show="item{{item.id}}.$invalid">This form is invalid</span></form>
?Согласно этому обсуждению на Github, проблема должна быть исправлена в AngularJS 1.3 .
Между тем, вот временное решение, созданное @caitp и @Thinkscape :
Демо на JSFiddle .
источник
Хороший от @EnISeeK .... но я сделал его более элегантным и менее навязчивым для других директив:
источник
Просто небольшое улучшение по сравнению с решением EnlSeek
Вот суд над плункером . Вот подробное объяснение
источник
Я немного расширяю решение @caitp и @Thinkscape, чтобы разрешить динамически создаваемые вложенные ng-формы , например:
Вот моя демонстрация на JSFiddle .
источник
Я использовал решение Бена Леша, и оно мне подходит. Но с одной проблемой, с которой я столкнулся, было то, что когда я добавил использование внутренней формы
ng-form
, все состояния формы, например, иform.$valid, form.$error
т.д., стали неопределенными, если я использовалng-submit
директиву.Итак, если бы у меня было это, например:
И в моем контроллере:
Поэтому мне пришлось вернуться к использованию обычного события щелчка для отправки формы, и в этом случае необходимо передать объект формы:
И доработанный метод контроллера:
Я не совсем уверен, почему это так, но, надеюсь, это кому-то поможет.
источник
Эта проблема исправлена в Angular 1.3+. Это правильный синтаксис того, что вы пытаетесь сделать:
источник
источник