我正在學習Angular2和RxJS,並且正在關注其他人的應用程序。在他的申請中,他有兩個模塊。第一個是asObservable.ts
文件:重寫代碼以使BehaviorSubject與Observable訂閱
asObservable.ts
export function asObservable(subject: Subject) {
return new Observable(fn => subject.subscribe(fn));
}
第二是創建一個新的BehaviorSubject
RxJS對象,並將其發送到asObservable.ts
模塊
待辦事項店內一個文件.service.ts
import {asObservable} from "./asObservable";
import {List} from "immutable";
import {Todo} from "./todo";
// Todo is a customized class
@Injectable()
export class TodoStore {
private _todos: BehaviorSubject<List<Todo>> = new BehaviorSubject(List([]));
get todos() {
return asObservable(this._todos);
}
loadInitialData() {
this.todoBackendService.getAllTodos()
.subscribe(
res => {
let todos = (<Object[]>res.json()).map((todo: any) =>
new Todo({id:todo.id, description:todo.description, completed: todo.completed}));
this._todos.next(List(todos));
},
err => console.log("Error retrieving Todos")
)
}
//unnecessary code omitted
}
我想消除asObservable.ts
文件,並在一個單一的功能進行訂閱功能,但我無法弄清楚它是如何完成的,是這樣的:
get todos() {
return new Observable(Subject.subscribe(this._todos));
}
這顯然是行不通的。有人能給我一些正確的方法來做到這一點,並簡要解釋我做錯了什麼?
'返回this._todos.asObservable ();'? –
@HarryNinh我的道歉,我添加了其他代碼,顯示this._todos.next(),爲了做到這一點,我需要訂閱。這是目標的一部分是創建一個Observable並訂閱。 'this._todos.asObservable()'仍然可以工作嗎? –
還是不明白你的觀點。如果你訂閱了'this._todos.asObservable()',只要'this._todos.next(...)'被調用,你就會收到更新。 –