Я вижу, могу ли я использовать combineLatest
в службе Angular для удаления блока коммутатора activeFiler$
(служба должна делать то же самое).Это компонент design прямо сейчас (ссылка на stackblitz) , и я пытаюсь удалить все свойства, кроме наблюдаемой render$
:
export class TodosComponent implements OnInit {
constructor(private ts:TodoService) {}
render$: Observable<Todo[]>;
activeFilter$: Observable<VISIBILITY_FILTER>;
ngOnInit() {
this.render$ = this.ts.selectedTodos$;
this.activeFilter$ = this.ts.activeFilter$;
this.activeFilter$.subscribe(active=>{
switch (active) {
case VISIBILITY_FILTER.SHOW_COMPLETED:
this.render$ = this.ts.completeTodos$;
break;
case VISIBILITY_FILTER.SHOW_ACTIVE:
this.render$ = this.ts.incompleteTodos$;
break;
default:
this.render$ = this.ts.todos$;
}
});
}
}
}
Как показано, я инициализировал this.render$
в Observable, возвращенный из файла todo.service.ts
.Метод выглядит следующим образом:
this.selectedTodos$ =
combineLatest(this.activeFilter$, this.completeTodos$, this.incompleteTodos$, this.todos$, this.applyFilter);
private applyFilter(filter, completeTodos, incompleteTodos, todos): Todo[] {
switch (filter) {
case VISIBILITY_FILTER.SHOW_COMPLETED:
return completeTodos;
case VISIBILITY_FILTER.SHOW_ACTIVE:
return incompleteTodos;
default:
return todos;
}
}
Итак, со всем этим, я думаю, я смогу удалить блок this.ts.ostore.observe(ACTIVE_FILTER_KEY).subscribe(active=>{
в компоненте todos, но если я удалил это, все приложение перестанет работать,
Одна странная вещь состоит в том, что если я закомментирую подписку $activeFilter
и зарегистрирую это:
this.render$ = this.ts.selectedTodos$;
this.render$.subscribe(v=>console.log(v));
Когда я ввожу больше задач, они регистрируются, но не отображаются... есть идеи?