es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Angular 11 – El método modal comprueba si hay un valor en la matriz y devuelve falso incluso cuando el constructor carga la matriz.

Tengo un formulario que registra un nuevo grupo de cursos llamados ‘áreas’. El formulario tiene un botón que llama a una ventana modal y permite al usuario seleccionar los cursos deseados y agregarlos a la lista del formulario.

La función inicial parece funcionar bien. Cuando selecciono un curso en el diálogo, se agrega al array del componente Padre. Luego, compruebo si el curso ya está seleccionado para mostrar un botón para deseleccionar el curso.

El problema radica cuando cierro el cuadro de diálogo modal y lo abro de nuevo. El método “isCourseSelected” (que comprueba si el objeto de “curso” está dentro del array) no funciona. Devuelve false incluso si el constructor rellena el array “modalSelectedCourses” desde el initialState del modalService.

Aquí está el código que tiene el problema:

Además, aquí está el código de la plantilla modal “courses-list-modal.component”:

No sé por qué el método devuelve false la segunda vez que abro el diálogo.

¡Gracias de antemano por su apoyo!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con la forma en que se está poblado y actualizando el array modalSelectedCourses. Cuando se abre el modal por primera vez, los cursos seleccionados se pasan como initialState al componente modal. Sin embargo, cuando se cierra y se vuelve a abrir el modal, el array modalSelectedCourses no se actualiza con los nuevos cursos seleccionados. Esto se debe a que el constructor sólo se llama una vez al crearse el componente modal.

    Para solucionar este problema, se podría mover el código que poblada el array modalSelectedCourses a un método separado que pueda ser llamado cada vez que se abra el componente modal. Por ejemplo:

    public refreshSelectedCourses() {
      this.modalSelectedCourses = this.modalService.config.initialState['modalSelectedCourses'];
    }
    

    Luego, se llama a este método cada vez que se abre el modal, antes de comprobar si se ha seleccionado un curso:

    openModalWithComponent() {
      const initialState = {
        modalSelectedCourses: this.selectedCourses
      };
      this.bsModalRef = this.modalService.show(CoursesModalComponent, {initialState, class: 'modal-lg'});
      this.bsModalRef.content.refreshSelectedCourses();
      this.bsModalRef.content.notifyParent.subscribe((e) => {
        this.processSelection(e);
      });
      this.bsModalRef.content.closeBtnName = 'Cerrar';
    }
    

    Al hacer esto, el array modalSelectedCourses siempre reflejará los últimos cursos seleccionados cada vez que se abra el modal.

Comments are closed.