Jak naprawić zdarzenie członka z błędu @ jonowego / kątowego w Ionic 5

11

Uaktualniłem z Ionic 4 do Ionic 5, teraz pojawia się następujący błąd:

BŁĄD w src / app / app.component.ts (4,10): błąd TS2305: Moduł „” / node_modules / @ ionic / angular / ionic-angular ”„ nie ma eksportowanego elementu „Zdarzenia”.

Problem powoduje następujący wiersz importu:

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

Jak mogę naprawić zdarzenie członka na podstawie @ionic/angularbłędu w Ionic 5?

Muhammad Omais
źródło
Cześć, mam ten sam problem. I dla mnie wygląda na to, że Ionic 4 usunął wydarzenia. Znalazłem to: stackoverflow.com/questions/58265379/… Może to pomaga
Ipad
1
mam ten sam błąd, chętnie znajdę też prosty zamiennik tego. W moim przypadku nie chcę iść na redux.
Fargho
Ja też to rozumiem. To wydaje się ogromną, przełomową zmianą. Czy kiedykolwiek zostało to udokumentowane przez zespół Ionic? Jeśli tak, chciałbym to przeczytać!
Jan
@ IPad, proszę sprawdzić moją odpowiedź.
Shashank Agrawal
@John jest to udokumentowane w dokumentacji zmiany Ionic. Proszę sprawdź moją odpowiedź.
Shashank Agrawal

Odpowiedzi:

18

Eventsod @ionic/angularpakiet został usunięty z jońskich 5. Widać łamaniu zmian Ionic5 tutaj .

Jak wspomniano w przełomowych zmianach, powinieneś użyć Observables .

Na przykład możesz utworzyć następującą usługę:

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;
    }
}

Teraz możesz subskrybować dowolny komponent, taki jak 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);
        });
    }
}

Teraz musisz po prostu wysłać zdarzenie z innego komponentu:

@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'
        });
    }
}

Jest to bardzo proste rozwiązanie / przykład lub alternatywa dla Events ale możesz dodatkowo ulepszyć kod, aby stał się zdarzeniem o przestrzeni nazw z tematem.

Napisałem na ten temat bloga, który może dać Ci w pełni funkcjonalne rozwiązanie, dzięki któremu przy mniejszej zmianie kodu możesz uaktualnić swoją aplikację.

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

Shashank Agrawal
źródło
0

Wydarzenia zostały usunięte. Możesz wykonywać swoją własną usługę jako wydarzenie jak własne, używając obserwowalnych i zachowań podmiotowych, aby móc publikować w ovserable i subskrybować, aby uzyskać wartość.

Mostafa Harb
źródło