Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.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
Angular 如何重置msInfiniteScroll的BehaviorSuject值?_Angular_Rxjs_Infinite Scroll - Fatal编程技术网

Angular 如何重置msInfiniteScroll的BehaviorSuject值?

Angular 如何重置msInfiniteScroll的BehaviorSuject值?,angular,rxjs,infinite-scroll,Angular,Rxjs,Infinite Scroll,我在这里复制了Haidar的示例(),为应用程序制作了一个无限卷轴。我按预期工作,无限滚动调用getNextBatch()函数以获取下一个值。但是,当用户单击按钮或其他事件时,我需要重置此值 我使用的是angular 6,这是我的代码: 这是我的html: <mat-select msInfiniteScroll (infiniteScroll)="getNextBatch()" placeholder="Select..." [complete]="offset === array.le

我在这里复制了Haidar的示例(),为应用程序制作了一个无限卷轴。我按预期工作,无限滚动调用getNextBatch()函数以获取下一个值。但是,当用户单击按钮或其他事件时,我需要重置此值

我使用的是angular 6,这是我的代码:

这是我的html:

<mat-select msInfiniteScroll (infiniteScroll)="getNextBatch()" placeholder="Select..." [complete]="offset === array.length"
      (selectionChange)="setValues($event.value)">
      <mat-option [value]="-1"> None</mat-option>
        <mat-option *ngFor="let option of options$ | async" [value]="option.ID">
          {{option.ID}}
        </mat-option>
</mat-select>

没有一个
{{option.ID}
我的js文件是:

limit = 10;
offset = 0;
options = new BehaviorSubject<VListaDocAttachEntity[]>([]);
options$: Observable<VListaDocAttachEntity[]>;
constructor(){
this.options$ = this.options.asObservable().pipe(
  scan((acc, curr) => {
    return [...acc, ...curr];
  }, [])
);
}
getNextBatch(noAdvance?: string) {
var result = [];
if (!noAdvance) {//this is the original behavior
  result = this.docNums.slice(this.offset, this.offset + this.limit);
  this.offset += this.limit;
} else { // this is the optional behavior
  var cnt: number = 0;
  for (var i = 0; i < this.docNums.length; i++) {
    this.documento.forEach(element => {
     if(this.docNums[i].Doc == element.DocNum){
        cnt++
      }
    });
    if (cnt == 0) {
      result.push(this.docNums[i]);
    }else{
      cnt =0;
    }
  }
}

this.options.next(result);//this appends to the list more elements
}
limit=10;
偏移量=0;
选项=新行为主体([]);
选项$:可观察;
构造函数(){
this.options$=this.options.asObservable().pipe(
扫描((附件,当前)=>{
返回[…acc,…curr];
}, [])
);
}
getNextBatch(noAdvance?:字符串){
var结果=[];
如果(!noAdvance){//这是原始行为
结果=this.docNums.slice(this.offset,this.offset+this.limit);
this.offset+=this.limit;
}否则{//这是可选行为
变量cnt:number=0;
for(var i=0;i{
if(this.docNums[i].Doc==element.DocNum){
碳纳米管++
}
});
如果(cnt==0){
结果推送(本文件[i]);
}否则{
cnt=0;
}
}
}
this.options.next(result);//这会在列表中添加更多元素
}
当我使用可选行为时,我会从原始列表中创建一个新列表,删除我已经选择的元素,并希望在我的mat中用新的筛选值替换以前的值


但是唯一的方法是next(),它附加了更多的元素。所以我想要的是重置这些值,并附加新列表。有办法吗?

附加更多元素的不是
next
,而是
scan
操作符。一种可能的解决方案是,通过访问
行为主题
属性,删除
扫描
,并在
getNextBatch
内进行追加,如下所示:

limit = 10;
offset = 0;
options = new BehaviorSubject<VListaDocAttachEntity[]>([]);
options$: Observable<VListaDocAttachEntity[]>;
constructor(){
// CHANGED
this.options$ = this.options.asObservable();
}
getNextBatch(noAdvance?: string) {
var result = [];
if (!noAdvance) {//this is the original behavior
  // CHANGED
  result = [...this.options.value, ...this.docNums.slice(this.offset, this.offset + this.limit)];
  this.offset += this.limit;
} else { // this is the optional behavior
  var cnt: number = 0;
  for (var i = 0; i < this.docNums.length; i++) {
    this.documento.forEach(element => {
     if(this.docNums[i].Doc == element.DocNum){
        cnt++
      }
    });
    if (cnt == 0) {
      result.push(this.docNums[i]);
    }else{
      cnt =0;
    }
  }
}

this.options.next(result);
}
limit=10;
偏移量=0;
选项=新行为主体([]);
选项$:可观察;
构造函数(){
//改变
this.options$=this.options.asObservable();
}
getNextBatch(noAdvance?:字符串){
var结果=[];
如果(!noAdvance){//这是原始行为
//改变
结果=[…this.options.value,…this.docNums.slice(this.offset,this.offset+this.limit)];
this.offset+=this.limit;
}否则{//这是可选行为
变量cnt:number=0;
for(var i=0;i{
if(this.docNums[i].Doc==element.DocNum){
碳纳米管++
}
});
如果(cnt==0){
结果推送(本文件[i]);
}否则{
cnt=0;
}
}
}
this.options.next(结果);
}