Tengo dos páginas como modal, la primera llamando a la segunda primera página .ts
export class FirstPage implements OnInit { filter: any = { date: { begin: null, end: null }, lieu: [], price: { min: null, max: null, monnaie: null }, hobbies: [], participants: { min: null, max: null }, distance: { min: null, max: null } } constructor( private modalController: ModalController, ) { } ngOnInit() { } goBack() { this.nav.back(); } searchEvent(){ console.log('search', this.filter) let filtreTmp = this.filterBeforeSearch(this.filter) console.log('this filter after before filter', filtreTmp, this.filter) } filterBeforeSearch(filter){ console.log('traitement search', filter) var filtreTmp = { ...filter } console.log('tmp', filtreTmp, filter) filtreTmp.hobbies = filtreTmp.hobbies.map(item => item.id) filtreTmp.lieu = filtreTmp.lieu.map(item => item.id) if(filtreTmp.price.monnaie){ console.log('traitement') filtreTmp.price.monnaie = filtreTmp.price.monnaie.id } console.log('this filter', filtreTmp, filter) return filtreTmp } async showFilters() { const popover = await this.modalController.create({ component: SecondPage, cssClass: 'modal_specific_pays', swipeToClose: true, presentingElement: await this.modalController.getTop(), componentProps: { filter: JSON.stringify(this.filter) } }); popover.onDidDismiss().then((dataReturned) => { if(dataReturned.data){ this.filter = dataReturned.data; console.log('data returned', this.filter) this.searchEvent() } }); return await popover.present(); } } mi lógica es cuando el modal es onDidDismiss, configuro los datos devueltos al filtro de la primera página; en mi evento de búsqueda, mi searchEvent tiene un objeto como valor al descartar modal, y con la función filterBeforeSearch cambio este objeto en string de id ;
así que cuando comento this.searchEvent dentro de mi onDidDismiss el objeto de alféizar de tipo monnaie, y cuando lo elimino, todos los console.log arriba del tratamiento que cambia este objeto en cadena muestran que el valor de monnaie ya cambió a cadena como si el tratamiento se ejecuta antes de console.log. Entonces, no sé en qué parte de este código se cambió este valor antes de que se ejecute el tratamiento porque si comento el tratamiento, el tipo de valor es un objeto;
segundo problema: he usado { ...this.filter } y Object.assign({}, this.filter) para clonar el valor de this.filter en filterTemp para evitar que mi valor de this.filter cambie por el tratamiento, pero siempre cambiado
PD: uso el nodo v14.17 si está relacionado con el nodo