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?


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


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ść.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.