繁体   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