Я пытаюсь написать пользовательский компонент, который может связываться с наблюдаемым, проходящим через элементы ввода и отображения/скрытия, в зависимости от состояния наблюдаемого. То, что я хотел бы быть в состоянии сделать что-то вроде:Функция запуска на наблюдаемой подписке
@Input() observable: Observable<any>;
ngOnInit() {
this.observable.onSubscribe(() => {
// show element, run logic on start;
});
this.observable.onCompleteOrNext(() => {
// hide element, run logic on end;
});
}
После обливание документации rxjs, я обнаружил, что с let я мог бы сделать что-то вроде:
this.observable.let((o: Observable) => {
// run logic.
return o;
});
Но это кажется немного взломанным, и я также не могу понять, как тогда запустить что-то, когда наблюдаемое завершается. Я ожидаю, что наблюдаемые будут асинхронными, такими как HTTP-запрос, но этот компонент должен обрабатывать его в любом случае.
Для наблюдаемым завершения, я предполагал, что я мог бы сделать что-то вроде ниже с do функции:
this.observable.do(() => {
// run logic when observable completes.
// not getting called.
});
Но, если функция do
не определяется на наблюдаемом создания, это не становится называется.
Я знаю, что Angular2 позволяет привязывать вид непосредственно к наблюдаемым, но мне также нужна возможность запускать логику на основе наблюдаемых, а не только элементов отображения/скрытия.
My googlefoo терпит неудачу, и документация rxjs не очень полезна, но я чувствую, что это должно быть довольно простой задачей. Возможно, я ошибаюсь.
Может быть, я что-то отсутствует, но почему бы не просто 'подписаться()' в 'ngOnInit' и указать' next', '' error' и complete' обратные вызовы прямо там? 'this.observable.subscribe (next => {}, err => {},() => {})' – BeetleJuice
Ну, я не хочу, чтобы этот компонент подписался на наблюдаемый, поскольку он не будет делать все с возвращенными данными. Это скорее всего должно быть в состоянии, основанном на других подписчиках. Имеет ли это смысл? – Blunderfest
Да, это имеет смысл. Где бы вы подписались? Родительский компонент? – BeetleJuice