Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

248
Vistas
Crear grupos de formularios anidados opcionales en Angular 2

Estoy tratando de implementar un formulario basado en modelos en Angular 2. La estructura de mi modelo de datos es la siguiente:

 archive (FormGroup) name (FormControl) description (FormControl) connection (FormGroup) url (FormControl) authentication (FormGroup) username (FormControl) password (FormControl)

Dentro de este modelo de datos, se requiere el nombre de nivel superior, pero el campo de descripción es opcional. Puedo aplicar un validador requerido al nombre y omitir un validador de la descripción.

Para la conexión, quiero que sea opcional, pero si hay una conexión, su URL se vuelve obligatoria. De manera similar para el modelo de autenticación de la conexión: es opcional, pero si está presente, se requerirá el nombre de usuario y la contraseña.

Estoy tratando de entender cómo configurar validadores para hacer cumplir estas reglas. Intenté simplemente omitir cualquier validador del grupo de formularios de conexión, pero eso parecía requerirme tener una conexión. He visto tutoriales en línea que explican cómo implementar la validación personalizada en grupos de formularios anidados, pero nada que describa cómo hacer que todo el grupo de formularios anidados sea opcional.

¿Existe una forma sencilla de implementar este modelo con Angular 2 FormGroup?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tuve una necesidad similar y aquí hay una manera de resolverlo:

 this.form = new FormGroup({ 'name': new FormControl(null, Validators.required), 'description': new FormControl(null), 'connection': new FormGroup({ 'url': new FormControl(null), 'authentification': new FormGroup({ 'username': new FormControl(null, Validators.minLength(5)), 'password': new FormControl(null), }, this.authentificationValidator.bind(this)), }, this.connectionValidator.bind(this)) });

Las 2 funciones del validador:

 authentificationValidator(g: FormGroup): any { const username = g.get('username').value; const password = g.get('password').value; if( (username && !password) || (!username && password) ) { return { authentification: true }; } } connectionValidator(g: FormGroup): any { const url = g.get('url').value; const authentification = g.get('authentification'); const username = authentification.get('username').value; const password = authentification.get('password').value; if( (username || password) && !url ) { return { connection: true }; } }

Y para la salida, si completa solo el nombre, aún tendrá:

 { "name": null, "description": null, "connection": { "url": null, "authentification": { "username": null, "password": null } } }

Por lo tanto, debe crear condicionalmente un nuevo objeto para tener:

 { "name": null, "description": null, "connection": null }

Verifique este plunker para experimentar esta solución

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda