簡體   English   中英

將數組作為行為主體可觀察到

[英]Returning array as Observable to Behavior subject

我根據待完成的待辦事項在路由中應用角度為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

您的服務中已經有一個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 {
    ...
  }
}

在您的組件中,您可以使用以下方法subscribeObservable來獲取todos

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

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

響應就是您從表單服務返回的東西

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM