Angular 如何重置msInfiniteScroll的BehaviorSuject值?
我在这里复制了Haidar的示例(),为应用程序制作了一个无限卷轴。我按预期工作,无限滚动调用getNextBatch()函数以获取下一个值。但是,当用户单击按钮或其他事件时,我需要重置此值 我使用的是angular 6,这是我的代码: 这是我的html: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
<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(结果);
}