Events
aus dem @ionic/angular
Paket wurde aus Ionic 5 entfernt. Sie können die bahnbrechenden Änderungen in Ionic5 hier sehen .
Wie in den wichtigsten Änderungen erwähnt, sollten Sie verwenden Observables
.
Sie können beispielsweise den folgenden Dienst erstellen:
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;
}
}
Jetzt können Sie jede Komponente wie abonnieren 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);
});
}
}
Jetzt müssen Sie nur noch das Ereignis von einer anderen Komponente ausgeben:
@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'
});
}
}
Dies ist eine sehr einfache Lösung / ein Beispiel oder eine Alternative der Events
aber Sie können Ihren Code weiter optimieren, um ihn zu einem Ereignis mit Namespace und einem Thema zu machen.
Ich habe einen Blog dazu geschrieben, der Ihnen eine umfassende Lösung bietet, mit der Sie Ihre App mit sehr wenig Codeänderung aktualisieren können.
https://medium.com/wizpanda/dealing-with-breaking-change-in-ionic-5-db3ba711dfcd