Возвращение массива в качестве наблюдаемого субъекту поведения - PullRequest
0 голосов
/ 29 ноября 2018

Я применяю фильтры todo в angular 6 с маршрутизацией, основанной на том, что если задача завершена, только завершенные (проверенные) задачи должны отображаться при щелчке по завершенной ссылке.Мне удалось получить задачи, которые выполняются в функции todoService (getTodos).Но так как getTodos является Observable, он не позволяет мне вернуть меня в массив todos

Вот мой код для сервиса

  public getTodos(query = ''): Observable<Todo[]>{
    if(query === 'completed' || query === 'active'){
      const isCompleted = query === 'completed';
      let todos = this.allTodos.filter(todo => todo.completed === isCompleted);
      console.log(todos);
      // this.storageService.getTodos().subscribe(todos => this.allTodos.filter(todo => todo.completed === isCompleted));
      // return this.todos.next('todos');
      return this.todos.asObservable();
    }else{
      return this.todos.asObservable();
    }
  }

Полная ссылка проекта в stackblitz

Ссылка на проект

PS: я новичок в угловой и все еще изучаю Observables / rxjs

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018
    Todo[] myTodos;

    todoService.getTodos('').subscribe(response => {
        //here you can response - what you return from service
        this.myTodos=response;
    });

ответом является то, что вы возвращаете из службы

0 голосов
/ 29 ноября 2018

У вас уже есть BehaviorSubject в вашем сервисе.Вы можете просто добавить общедоступный Observable к вашему сервису:

public todos$: Observable<Todo[]> = this.todos.asObservable();

И затем в вашем getTodos методе:

public getTodos(query = ''): Observable < Todo[] > {
  if (query === 'completed' || query === 'active') {
    ...
    this.todos.next(todos);
  }
  else {
    ...
  }
}

И в вашем Компоненте вы можете получить todos на subscribe к этому Observable используя это:

todos;
constructor(private todoService: TodoService, ...) {}
...
this.todoService.todos$.subscribe(todos => this.todos = todos);
...