Cómo arreglar el evento miembro de un error @ ionic / angular en Ionic 5

9

He actualizado de Ionic 4 a Ionic 5, ahora obtengo el siguiente error:

ERROR en src / app / app.component.ts (4,10): error TS2305: El módulo '"/ node_modules / @ ionic / angular / ionic-angular"' no ha exportado ningún miembro 'Eventos'.

La siguiente línea de importación está causando el problema:

import { Events, Platform } from '@ionic/angular';

¿Cómo puedo solucionar el evento miembro por @ionic/angularerror en Ionic 5?

Muhammad Omais
fuente
Hola, estoy enfrentando el mismo problema. Y para mí, parece que Ionic 4 eliminó los eventos. Encontré esto: stackoverflow.com/questions/58265379/… Tal vez esto ayude
Ipad
1
Tengo el mismo error, también estaría feliz de encontrar un reemplazo simple para eso. No quiero ir por redux en mi caso.
Fargho
Yo también entiendo esto. Esto parece un cambio masivo y rompedor. ¿Fue eso documentado alguna vez por el equipo de Ionic? Si es así, ¡me gustaría leer eso!
John
@ IPad, comprueba mi respuesta.
Shashank Agrawal
@John está documentado en la documentación de cambio de última hora de Ionic. Por favor revisa mi respuesta.
Shashank Agrawal

Respuestas:

15

Eventsdel @ionic/angularpaquete se eliminó de Ionic 5. Puede ver los cambios importantes en Ionic5 aquí .

Como se menciona en los cambios de última hora, debe usar Observables.

Por ejemplo, puede crear el siguiente servicio:

import {Injectable} from '@angular/core';
import {Subject} from 'rxjs';

@Injectable({
    providedIn: 'root'
})
export class GlobalFooService {

    private fooSubject = new Subject<any>();

    publishSomeData(data: any) {
        this.fooSubject.next(data);
    }

    getObservable(): Subject<any> {
        return this.fooSubject;
    }
}

Ahora, puede suscribirse en cualquier componente como app.component.ts:

@Component({
    selector: 'app-root',
    templateUrl: 'app.component.html',
    styleUrls: ['app.component.scss']
})
export class AppComponent {

    constructor(private globalFooService: GlobalFooService) {
        this.initializeApp();
    }

    initializeApp() {
        // other code

        this.globalFooService.getObservable().subscribe((data) => {
            console.log('Data received', data);
        });
    }
}

Ahora, solo tiene que emitir el evento desde algún otro componente:

@Component({
    selector: 'app-home',
    templateUrl: 'home.page.html',
    styleUrls: ['home.page.scss']
})
export class HomePage {

    constructor(private globalFooService: GlobalFooService) {
    }

    onSomeButtonClick() {
        this.globalFooService.publishSomeData({
            foo: 'bar'
        });
    }
}

Esta es una solución / ejemplo muy simple o una alternativa, Eventspero puede modificar su código aún más para convertirlo en un evento de espacio de nombres con un tema.

He escrito un blog sobre esto que puede darle una solución con todas las funciones para que con muy poco cambio de código, pueda actualizar su aplicación.

https://medium.com/wizpanda/dealing-with-breaking-change-in-ionic-5-db3ba711dfcd

Shashank Agrawal
fuente
0

Los eventos han sido eliminados. Puede hacer su propio servicio como evento propio usando observables y comportamiento del sujeto para que pueda publicar en el ovserable y suscribirse para obtener el valor.

Mostafa Harb
fuente