2012-10-05 51 views
7

Estoy evaluando AngularJS y hasta ahora estoy muy entusiasmado con ello. Pero hay algo que falta en la parte frontal de validación: las opciones disponibles, tales como la built-in mechanisms y la AngularUI initiative, implementan validadores través de directivas y, como tal, todos los validación debe ser declarado en la vista:Estrategias de validación con AngularJS

<form ng-controller="SomeController"> 
    <!-- Notice the 'required' attribute directive below: --> 
    <input type="text" ng-model="user.name" name="uName" required /> 
</form> 

En este ejemplo, la vista define que se requiere user.name. Es como decir que la vista define la forma correcta del modelo. ¿No es un poco al revés? ¿No debería la vista reflejar los estados, incluidos los estados de error cuando es el caso?

¿No soy fiel? Me pregunto si es posible aplicar validadores en el controlador , señalizar los datos del modelo como válidos/inválidos y actualizar la vista en consecuencia (pintar los controles de formulario con rojo, mostrar mensajes de error, borrar errores previos, etc.). Asumo que AngularJS es lo suficientemente potente para esto, pero en los documentos y muestras hasta el momento, simplemente no he visto nada como lo he descrito anteriormente. ¡Gracias!

+0

'required' es un atributo HTML5. http://html5doctor.com/html5-forms-introduction-and-new-attributes/ También puedes establecer los atributos 'input'' type' en cosas como 'email, tel, date, url, number' y validarán en consecuencia. –

+0

Además, nunca he usado AngularUI Validate, acabo de utilizar la validación vertical de AngularJS con HTML5 y funcionó perfectamente bien. AngularUI Validate es para agregar validación de expresiones personalizadas a un campo. –

Respuesta

1

Supongo que es todo acerca de la perspectiva. La forma en que lo veo es que está definiendo una vista que contiene un formulario y ese formulario contiene una entrada de tipo texto. Es esta entrada de texto la que está marcando según sea necesario. Si observa, angular no le importa si el texto es user.name o user.age o lo que sea. Es solo asociar esa entrada de texto con requerida. Por lo tanto, solo se trata de validar que el ingreso de texto y el modelo asociado con ese modelo es el resultado final (¡el lugar donde el valor entra si la validación pasa!).

Tenga una mirada en

http://docs.angularjs.org/guide/forms

para validaciones de formularios personalizados, si desea estar haciendo validaciones que no son la falta de pago.

Como ya conoce la vista que se está produciendo por adelantado (¡llamemos en tiempo de compilación!), Puede asociar todos los validadores en la vista y no tendría que hacerlo en el controlador (que quizás sea para ejecutar -tiempo de validación!).