Ich verwende Aurelia Framework
mit Typescript
und in der event aggregator
kann ich Kanäle veröffentlichen und abonnieren.Aurelia Abmelden Ereignisaggregator
Das Problem ist, dass ich nicht von einem Kanal abmelden kann.
Hinweis: Alle Formen der subscribe-Methode geben eine Dispose-Funktion zurück. Sie können diese Funktion aufrufen, um das Abonnement zu entfernen und den Empfang von Nachrichten zu beenden. Ein guter Ort, um zu disponieren, ist entweder ein deaktivierter Callback eines View-Modells, wenn es von einem Router verwaltet wird, oder ein separater Callback, wenn es sich um ein anderes View-Modell handelt.
Dies ist aus der aurelia official documentation website übernommen und ich verstehe nicht wirklich, wie dies zu implementieren ist.
Ich ging auf die aurelia gitter channel und ich fand 3 Diskussionen darüber, wo einer von ihnen das folgende Beispiel für Abmelde gab:
sub = ea.subscribe();
//unsubscribe the event
sub();
Das Problem ist, dass dieser Code nicht in Typoskript funktioniert.
Wie kann ich mich von einem event aggregator
in Typescript abmelden?
nun mit diesem Code
@inject(Publisher, Subscriber)
export class Home {
publisher: Publisher;
subscriber: Subscriber;
channelName = "testChannel";
constructor(pub: Publisher, sub: Subscriber) {
this.publisher = pub;
this.subscriber = sub;
this.subscriber.subscribe(this.channelName);
this.publisher.publish(this.channelName, "Ana are mere");
}
}
@inject(EventAggregator)
export class Publisher {
eventAggregator: EventAggregator = null;
constructor(agg: EventAggregator) {
this.eventAggregator = agg;
}
publish(channelName: string, object: Object) {
this.eventAggregator.publish(channelName, object);
}
}
@inject(EventAggregator)
export class Subscriber {
eventAggregator: EventAggregator = null;
constructor(agg: EventAggregator) {
this.eventAggregator = agg;
}
subscribe(channelName: string) {
this.eventAggregator.subscribe(channelName, object => {
//TODO do something with received object
alert(object);
});
}
unsubscribe(channelName: string) {
debugger;
}
}
wenn die Home
Komponente ausgeführt wird, das Verfahren zur Zeichnung wird nicht nur einmal ausgeführt, sondern so oft wie der cosntructor aufgerufen wurde. Also, wenn ich 3 mal auf der Startseite war, wird es 3 Mal ausgeführt.
So: Warum wird meine Abonnentenmethode mehrere Male ausgelöst? Wie kann ich mich in TypeScript von event-aggregatoor
abmelden?
Danke!
Was ich wirklich vermisst habe, war der Hinweis auf die Dispose-Funktion. Vielen Dank! :) –
Dies ist in der Oktober-Version von Aurelia aktualisiert. Der Subskriptionsaufruf gibt jetzt ein Subskriptionsobjekt zurück, mit dem Sie die dispose() -Methode aufrufen können, um das Abonnement zu beenden. –