Aurelia 中的数组订阅
Array subscription in Aurelia
假设我有一个元素数组,除了在我的应用程序中显示列表外,我还想使用 HttpClient
将列表同步到服务器。如何观察数组的变化?我试过了:
@inject(ObserverLocator)
export class ViewModel {
constructor(obsLoc) {
this.list = [];
obsLoc.getObserver(this, 'list');
.subscribe(li => console.log(li));
}
}
但是我既没有收到错误消息也没有收到日志消息。
getObserver
returns 一个 属性 观察者,它将在 ViewModel
class 实例的 list
属性 发生变化时通知您.这只会在您为 list
属性 分配新值时发生,即 this.list = [1,2,3]
。如果您没有为 list
属性 分配新值,而是通过 push
、pop
、[=20= 改变 属性 的值],等等,你会想要使用数组观察器。使用 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));
}
}
2015 年 10 月更新
ObserverLocator 是 Aurelia 的内部 "bare metal" API。现在有一个 public 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();
}
}
假设我有一个元素数组,除了在我的应用程序中显示列表外,我还想使用 HttpClient
将列表同步到服务器。如何观察数组的变化?我试过了:
@inject(ObserverLocator)
export class ViewModel {
constructor(obsLoc) {
this.list = [];
obsLoc.getObserver(this, 'list');
.subscribe(li => console.log(li));
}
}
但是我既没有收到错误消息也没有收到日志消息。
getObserver
returns 一个 属性 观察者,它将在 ViewModel
class 实例的 list
属性 发生变化时通知您.这只会在您为 list
属性 分配新值时发生,即 this.list = [1,2,3]
。如果您没有为 list
属性 分配新值,而是通过 push
、pop
、[=20= 改变 属性 的值],等等,你会想要使用数组观察器。使用 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));
}
}
2015 年 10 月更新
ObserverLocator 是 Aurelia 的内部 "bare metal" API。现在有一个 public 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();
}
}