Typescript 如何订阅阵列更改?

Typescript 如何订阅阵列更改?,typescript,angular,rxjs,Typescript,Angular,Rxjs,我想知道是否可以订阅一个变更对象,即数组。我的用例如下:用户重新加载一个页面,需要加载整个集合,然后获取一个具有特定id的对象。正如我所知,我可以创建如下函数: let objects = this.objectService.getObjects() // returns object that will hold the collection; objects.subscribe((value) => { if(value.length) { //Do som

我想知道是否可以订阅一个变更对象,即数组。我的用例如下:用户重新加载一个页面,需要加载整个集合,然后获取一个具有特定id的对象。正如我所知,我可以创建如下函数:

let objects = this.objectService.getObjects() // returns object that will hold the collection;
objects.subscribe((value) => { 
    if(value.length) {
        //Do something
    }
});
this.objectService.getObjects().then(items=> this.items = items);
在构造函数中:

this.getById(id);
以及功能

getById(id: string){
    this.object = this.objectsService.getById(id);
    if (this.object.name){ //check if object exist
        //Do something
    } else {
        setTimeout(()=>{
            this.getById(id)
        }, 1000);
    }
}
然而,我觉得这不是最好的办法。所以,我想做的是这样的:

let objects = this.objectService.getObjects() // returns object that will hold the collection;
objects.subscribe((value) => { 
    if(value.length) {
        //Do something
    }
});
this.objectService.getObjects().then(items=> this.items = items);

如果我正确理解了你的问题,你是想从数组中创建一个可观察的对象,这样你就可以订阅它了?如果是这样的话,您可能正在寻找
Rx.Observable.from(iterable,[mapFn],[thisArgs],[scheduler]
。中有一个关于此的页面

它从一个数组中创建一个可观察对象,然后您可以订阅该数组

像这样的东西可能就是你想要的

 Rx.Observable.from([1,2,3]).subscribe(x => // do something with x);
订阅更改阵列 正如注释中指出的,上述方法订阅数组并观察数组中当前的值,但不处理对该数组的更改


这里的一种方法可能是创建一个主题,并观察该主题。不将值推送到现有数组,而是将值推送到主题(该主题基本上包含一个元素数组)。当您点击主题时,您会生成一个可被订阅者捕获的事件。

您可以存储对数据数组的引用,而不是可观察的。例如,当来自http服务的呼叫返回可观察的时,您可以执行以下操作

function getObjects:Promise<Item[]>{
        return this.http.get(this.apiUrl)
                      .toPromise()
                      .then(this.extractData)
    }

    private extractData(res: Response) {
      let body = res.json();
      return body.data || { };
    }
接下来,当您需要通过其id获取项目时,您可以执行以下操作:

let currentItem = this.items.filter(x=> x.id == currentId)

通过这种方式,您可以在页面加载时缓存列表,并在用户选择更改时准备好值。

这将向订阅者发送3个值,但不会像OP描述的那样“订阅”更改。