假设我有一系列元素,除了在我的应用中显示列表外,我还想将列表与HttpClient
同步到服务器。如何观察阵列的变化?我试过了:
@inject(ObserverLocator)
export class ViewModel {
constructor(obsLoc) {
this.list = [];
obsLoc.getObserver(this, 'list');
.subscribe(li => console.log(li));
}
}
但我既没有错误也没有记录消息。
答案 0 :(得分:27)
getObserver
返回一个属性观察者,当ViewModel
类实例的list
属性发生变化时,它将通知您。只有在为list
属性分配新值时才会发生这种情况,即this.list = [1,2,3]
。如果您没有为list
属性分配新值,而是通过push
,pop
,splice
等来改变该属性的值,那么您&# 39; ll想要使用数组观察者。使用ObserverLocator
' getArrayObserver
方法 - 它需要一个参数,即您要观察的数组:
import {ObserverLocator} from 'aurelia-binding'; // or from 'aurelia-framework'
@inject(ObserverLocator)
export class ViewModel {
constructor(obsLoc) {
this.list = [];
obsLoc.getArrayObserver(this.list);
.subscribe(splices => console.log(splices));
}
}
ObserverLocator是Aurelia的内部"裸机" API。现在可以使用绑定引擎的公共API:
import {BindingEngine} from 'aurelia-binding'; // or from 'aurelia-framework'
@inject(BindingEngine)
export class ViewModel {
constructor(bindingEngine) {
this.list = []; // any Array, Map and soon Set will be supported
// subscribe
let subscription = bindingEngine.collectionObserver(this.list)
.subscribe(splices => console.log(splices));
// be sure to unsubscribe **later**
subscription.dispose();
}
}