Tengo este formulario: http://jsfiddle.net/dfJeN/
Como puede ver, el valor del nombre de la entrada está establecido estáticamente:
name="username"
, la validación del formulario funciona bien (agregue algo y elimine todo el texto de la entrada, debe aparecer un texto).
Luego trato de establecer dinámicamente el valor del nombre: http://jsfiddle.net/jNWB8/
name="{input.name}"
Entonces aplico esto a mi validación
login.{{input.name}}.$error.required
(este patrón se usará en una repetición ng) pero la validación de mi formulario está rota. Se interpreta correctamente en mi navegador (si inspecciono el elemento vi login.username. $ Error.required).
Alguna idea ?
EDITAR: Después de registrar el alcance en la consola, parece que el
{{input.name}}
la expresión no se interpola. Mi formulario como atributo {{input.name}} pero sin nombre de usuario.
ACTUALIZACIÓN: Desde 1.3.0-rc.3 name = "{{input.name}}" funciona como se esperaba. Consulte el n. ° 1404
Respuestas:
No puede hacer lo que está tratando de hacer de esa manera.
Suponiendo que lo que está intentando hacer es que necesita agregar elementos dinámicamente a un formulario, con algo como un ng-repeat, debe usar ng-form anidado para permitir la validación de esos elementos individuales:
Lamentablemente, no es una característica bien documentada de Angular.
fuente
El uso de ngForm anidado le permite acceder al InputController específico desde dentro de la plantilla HTML. Sin embargo, si desea acceder a él desde otro controlador, no ayuda.
p.ej
Utilizo esta directiva para ayudar a resolver el problema:
Ahora usa nombres dinámicos donde sea necesario, solo el atributo 'nombre dinámico' en lugar del atributo 'nombre'.
p.ej
fuente
$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>
?El problema debería solucionarse en AngularJS 1.3, de acuerdo con esta discusión sobre Github .
Mientras tanto, aquí hay una solución temporal creada por @caitp y @Thinkscape :
Demo en JSFiddle .
fuente
Bonito de @EnISeeK ... pero lo conseguí para ser más elegante y menos molesto para otras directivas:
fuente
Solo una pequeña mejora con respecto a la solución EnlSeek
Aquí hay una prueba más profunda . Aquí hay una explicación detallada
fuente
Amplío un poco la solución @caitp y @Thinkscape, para permitir ng-formas anidadas creadas dinámicamente , como esta:
Aquí está mi demostración en JSFiddle .
fuente
Usé la solución de Ben Lesh y me funciona bien. Pero un problema que enfrenté fue que cuando agregué un formulario interno usando
ng-form
, todos los estados del formulario, por ejemplo,form.$valid, form.$error
etc., se volvieron indefinidos si estaba usando elng-submit
directiva.Entonces, si tuviera esto, por ejemplo:
Y en mi controlador:
Así que tuve que volver a usar un evento de clic regular para enviar el formulario, en cuyo caso es necesario pasar el objeto del formulario:
Y el método de controlador revisado:
No estoy muy seguro de por qué esto es así, pero espero que ayude a alguien.
fuente
Este problema se ha solucionado en Angular 1.3+ Esta es la sintaxis correcta para lo que está tratando de hacer:
fuente
fuente