【发布时间】:2018-07-18 14:05:25
【问题描述】:
我见过三种方法来管理 Angular2 中的变更检测。
-
可观察的
@Injectable() export class TodosService { todos$: Observable<Array<Todo>>; private _todosObserver: any; private _dataStore: { todos: Array<Todo> }; constructor(private _http: Http) { // Create Observable Stream to output our data this.todos$ = new Observable(observer => this._todosObserver = observer).share(); this._dataStore = { todos: [] }; } } -
事件发射器。
@Injectable() class NameService { name: any; nameChange: EventEmitter = new EventEmitter(); constructor() { this.name = "Jack"; } change(){ this.name = "Jane"; this.nameChange.emit(this.name); } } -
点规则
export interface Info { name:string; } @Injectable() class NameService { info: Info = { name : "Jack" }; change(){ this.info.name = "Jane"; } }
我的问题是,订阅观察数据变化时,所有三种实现都可以工作。您如何决定何时使用其中一种而不是另一种,以及每种方法的缺点是什么。
【问题讨论】:
-
点规则的一个缺点:它是隐式的而不是显式的。到目前为止,我更喜欢 EventEmitter。
-
点规则是什么意思?
标签: angular