Angular/Ionic FormGroup, FormArray, FormBuilder… Estoy perdido.
Caso de uso: Esta es una página de actualización de inventario para una cafetería.
Un elemento de inventario se define de la siguiente manera:
interface InventoryData {
category: string;
current: number;
id: string;
name: string;
par: number;
units: string;
previous?: string;
supplier: string;
notes?: string;
}
En esta página, solo estoy manipulando el nivel current
y las notes?
para cada elemento.
En la parte inferior del formulario, tengo un ion-textarea
que es un espacio para que los asociados escriban cualquier cosa que los gerentes deban saber.
Entonces, la estructura de la página es:
ENCABEZADO
ENCABEZADOS DE SECCIÓN INGRESADOS AUTOMÁTICAMENTE AL CAMBIAR DE CATEGORÍA
ELEMENTO[0] <-+
[DETALLES DEL ELEMENTO] |
[INGRESAR CANTIDAD ACTUAL] |
[INGRESAR NOTAS] |--- Array de elementos similares con
ELEMENTO[1]... | entradas para cantidad y notas
ELEMENTO[2]... | para cada uno
|
ELEMENTO[n] <-+
SECCIÓN DE NOTAS GENERALES <—- no es parte de un elemento… información general.
PIE DE PÁGINA
He intentado configurar la página como tener dos formularios separados, uno para los elementos del inventario y otro para las notas generales al final. Algo así:
inventoryForm = this.fb.group({
items: this.fb.array([]),
});
notesForm = this.nb.group({
notes: [''],
});
Y he intentado configurarlo como un solo formulario que tiene el array de elementos más un campo de formulario adicional para las notas generales.
Pero todo parece muy desordenado.
Entonces, espero aprender cómo lo harían las personas experimentadas. Esta es más una pregunta de estrategia que de codificación, pero estaría encantado de recibir consejos en cualquier dirección.
davy.ai
Enfoque para la página de actualización de inventario de una cafetería
Al diseñar la página de actualización de inventario para una cafetería, hay diferentes formas de estructurar el formulario. Aquí tienes un enfoque a considerar:
InventoryData
: Esta interfaz define la estructura de los datos del inventario.Utiliza
FormBuilder
para crear un grupo de formularios: El grupo de formularios debe tener dos matrices de formularios, una para los elementos del inventario y otra para las notas.Crea un grupo de formularios para cada elemento del inventario: El grupo de formularios del elemento del inventario tendrá dos controles de formularios:
current
ynotes
. El control de formulariocurrent
permitirá al usuario ingresar la cantidad actual. El control de formularionotes
permitirá al usuario ingresar cualquier nota.Utiliza
FormArray
para contener los grupos de formularios de los elementos del inventario: Los grupos de formularios de los elementos del inventario se agregarán alFormArray
.Define un control de formulario
notes
: El control de formularionotes
permitirá al usuario escribir cualquier nota adicional.Utiliza la directiva
*ngFor
para los elementos del inventario.Actualiza los datos del formulario: Cada vez que los valores de los controles de formularios cambien, los datos del formulario se actualizarán automáticamente.
Aquí tienes un ejemplo de fragmento de código:
En la plantilla HTML:
En resumen, estructurar el formulario de esta manera permite un fácil acceso a cada elemento del inventario y la capacidad de actualizar la cantidad actual y las notas de cada elemento. También permite agregar notas adicionales al final y mantiene los datos del formulario organizados para una fácil presentación.