【发布时间】:2018-12-31 10:26:48
【问题描述】:
我已经克隆了一个基于 RXJS 的 Github repo,带有 angular 2+。 帮我理解 this.createTodo$.subscribe(this.create$) 的含义 在下面的代码中。
我能够理解,这里我们正在尝试订阅 createTodo$ observable。在订阅方法中,我总是设置数据,但是什么 this.create$ 表示。这里 create$ 是一个 Subject。
请找到进行此订阅的服务代码。
import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable ,Subject} from 'rxjs';
import { itemmodel } from './models/listmodel';
import {scan,map} from 'rxjs/operators';
type TodosOperation = (todos: itemmodel[]) => itemmodel[];
const initialTodos=[];
@Injectable({
providedIn: 'root'
})
export class SharedserviceService {
public data;
create$: Subject<itemmodel> = new Subject<itemmodel>();
createTodo$: Subject<itemmodel> = new Subject<itemmodel>();
todos$:Observable<itemmodel[]>;
public item = new BehaviorSubject([]);
update$: BehaviorSubject<TodosOperation> = new BehaviorSubject<TodosOperation>((todos: itemmodel[]) => todos);
constructor(){
this.todos$ = this.update$.pipe(scan((todos: itemmodel[], operation: TodosOperation) => operation(todos), initialTodos));
this.create$.pipe(map((todo) => {
return (todos) => todos.concat(todo);
})).subscribe(this.update$);
this.createTodo$.subscribe(this.create$);
}
public additem(item){
this.createTodo$.next(item);
}
}
【问题讨论】:
-
Subject既是Observable又是Observer。subscribe接受Observer,因此可以传递Subject。 -
感谢卡坦特!我一直在寻找一篇简单的文章来理解它。你能提供任何有用的链接吗?
标签: angular rxjs observable subject behaviorsubject