Я использую Aurelia Framework
с Typescript
, а в event aggregator
я могу публиковать и подписываться на каналы.
Проблема в том, что я не могу отказаться от подписки на канал.
Примечание. Все формы метода подписки возвращают функцию удаления. Вы можете вызвать эту функцию, чтобы избавиться от подписки и прекратить прием сообщений. Хорошее место для размещения - либо в режиме просмотра, либо при отключении обратного вызова, если он управляется маршрутизатором, либо в его отключенном обратном вызове, если это какая-либо другая модель представления.
Это взято из официального сайта документации aurelia, и я действительно не понимаю, как это реализовать.
Я пошел на канал aurelia gitter, и я нашел 3 обсуждения об этом, где один из них привел следующий пример для отказа от подписки:
sub = ea.subscribe();
//unsubscribe the event
sub();
Проблема заключается в том, что этот код не работает в TypeScript.
Как отказаться от подписки на event aggregator
в Typescript?
Теперь, используя этот код
@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;
}
}
при выполнении компонента Home
метод подписания не выполняется только один раз, но столько раз, сколько был вызван cosntructor. Итак, если я был на домашней странице 3 раза, он будет выполнен три раза.
Итак:
Почему мой метод подписчика срабатывает несколько раз?
Как отказаться от подписки на event-aggregatoor
в Typescript?
Спасибо!