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

132
Vistas
¿Dinámico desde campos usando formularios reactivos en Angular?

Tengo un escenario como Necesito editar los valores de comillas simples (solo valores de comillas simples),

Así que extraje los valores de comillas simples usando expresiones regulares y preparé la forma dinámica reactiva.

Al hacer clic en el botón de edición, se mostrará el nombre del paso anterior arriba, el nombre del nuevo paso debajo, el paso de envío reemplazará el nombre del paso en la matriz original.

Funcionó bien como se esperaba en algunos escenarios de acuerdo con mi enfoque, pero en los escenarios, me di cuenta de que cualquier algoritmo que estoy siguiendo no cumple con mis requisitos.

A continuación se muestran los casos de prueba.

Caso de prueba 1: Nombre del paso: "Entonces debería contratar a un empleado usando el perfil '1' para 'EE. UU.'", // Aquí --> '1', los valores de 'EE. UU.' son editables

Caso de prueba 2: "Y el empleado debe ser contratado el día '01' del período de pago '01' de 'Actual' fiscal" // '01', '01', 'Actual'

Problemas: en el caso de prueba 2, si traté de editar el segundo 01, está editando el primer 01

Intento resolver la función de edición de ejecución con la ayuda de indexof, funciones de subcadena

 this.replaceString = this.selectedStep.name; this.metaArray.forEach((element: any) => { var metaIndex = this.replaceString.indexOf(element.paramValue); if (metaIndex !== -1) { const replaceValue = this.stepEditForm.controls[element['paramIndex']].value; this.replaceString = this.replaceString.substring(0, metaIndex) + replaceValue + this.replaceString.substring(metaIndex + (element.paramValue.length)); } });

pero en indexof siempre encuentra la primera aparición de un valor en una cadena. Así que me di cuenta de que mi enfoque es incorrecto al realizarlo.

por favor encuentre el archivo adjunto para el código

https://stackblitz.com/edit/angular-reactive-forms-cqb9hy?file=app%2Fapp.component.ts

Entonces, ¿alguien puede sugerirme cómo resolver este problema?

Gracias por adelantado

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Agregué una función llamada matchStartingPositions que devuelve los índices de posición inicial de cada partido. Usando este método, puede realizar su edición reemplazando la cadena tal como lo hace, pero encontraremos la coincidencia adecuada para ser reemplazada en la posición dada.

Así que en tu línea

 var metaIndex = this.replaceString.indexOf(element.paramValue);

luego podemos agregar un segundo parámetro a indexOf, ese es el punto de partida:

 var metaIndex = this.replaceString.indexOf(element.paramValue, startingPositions[element.paramIndex]);

La función para obtener las posiciones del índice solo busca esas comillas simples en una cadena dada:

 matchStartingPositions(str) { let count = 0; let indices = []; [...str].forEach((val, i) => { if (val === "'") { if (count % 2 == 0) { indices.push(i); } count++; } }); return indices; }

Aquí está en acción:

https://angular-reactive-forms-xhkhmx.stackblitz.io

https://stackblitz.com/edit/angular-reactive-forms-xhkhmx?file=app/app.component.ts

about 4 years ago · Juan Pablo Isaza 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