Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当结果不同时返回结果,rxjs_Javascript_Angular_Rxjs5 - Fatal编程技术网

Javascript 仅当结果不同时返回结果,rxjs

Javascript 仅当结果不同时返回结果,rxjs,javascript,angular,rxjs5,Javascript,Angular,Rxjs5,我正在构建一个具有材质数据网格的组件 在每一行中,我动态创建一个组件并添加到最后一个单元格中,它被设置为省略号(查看更多按钮) 我有一个函数,可以将它们添加到表单元格中,并从api调用返回的数据中向它们添加信息 addEllipsisToTable() { setTimeout(() => { let sideMenu = this.sideMenu.toArray() // Add ellipsis menus' to returned results

我正在构建一个具有材质数据网格的组件

在每一行中,我动态创建一个组件并添加到最后一个单元格中,它被设置为省略号(查看更多按钮)

我有一个函数,可以将它们添加到表单元格中,并从api调用返回的数据中向它们添加信息

  addEllipsisToTable() {
    setTimeout(() => {
      let sideMenu = this.sideMenu.toArray()
      // Add ellipsis menus' to returned results
      for (let i = 0; i < sideMenu.length; i++) {
        const factory = this.resolver.resolveComponentFactory(this.ellipsis);
        let container = this.sideMenu.toArray()[i]
        const ellipsisComponent = container.createComponent(factory);
        ellipsisComponent.instance.data = this.returnedData[i]
      }
    }, 300)

  }
键入并返回数据时,将执行getPagedInfo函数,该函数删除省略号,获取数据,然后将新数据添加回:

getPagedInfo() {
    return this.dataSource.pagedInfoSubject
      // .skip(1)
      .pipe(
        tap(() => this.removeEllipsisFromTable())
      )
      .subscribe((data) => {
        this.selection.clear();
        this.totalItems = data.totalItems;
        this.returnedData = data.returnedData;
        this.addEllipsisToTable()//This sometimes gets performed twice
        console.log(this.returnedData)
        //returnedData holds array of current visible items
        if (this.totalItems == 0) {
          this.filtersArray = [];
        } else if (this.totalItems < 10) {
          this.filtersArray = [];
        }
      });
  }
getPagedInfo(){
返回this.dataSource.pagedInfoSubject
//.skip(1)
.烟斗(
轻触(()=>this.removeEllipsFromTable())
)
.订阅((数据)=>{
this.selection.clear();
this.totalItems=data.totalItems;
this.returnedData=data.returnedData;
this.addEllipsisToTable()//有时会执行两次
console.log(this.returnedData)
//returnedData保存当前可见项的数组
如果(this.totalItems==0){
this.filtersArray=[];
}否则,如果(此.totalItems<10){
this.filtersArray=[];
}
});
}

我是否可以使用rxjs函数,或者我是否必须将新返回的数据与旧数据进行匹配,如果不同,则添加?

您是否可以将
。跳过(1)
替换为
获取(1)
?如果
addEllipsisToTable
被多次调用,那只能意味着你的可观察回报被多次调用。感谢你的回答,尝试了你的建议,不得不使用.skip(1).take(1),因为当应用程序第一次加载时,它似乎是先加载未定义的结果,所以如果我只使用了.take(1)它没有加载,问题是take()unsubscribes,所以这个函数不会再次启动,我需要它
getPagedInfo() {
    return this.dataSource.pagedInfoSubject
      // .skip(1)
      .pipe(
        tap(() => this.removeEllipsisFromTable())
      )
      .subscribe((data) => {
        this.selection.clear();
        this.totalItems = data.totalItems;
        this.returnedData = data.returnedData;
        this.addEllipsisToTable()//This sometimes gets performed twice
        console.log(this.returnedData)
        //returnedData holds array of current visible items
        if (this.totalItems == 0) {
          this.filtersArray = [];
        } else if (this.totalItems < 10) {
          this.filtersArray = [];
        }
      });
  }