要从BehaviorSubject获取值,必须调用getValue((。
我有两个组件。在一个组件中有复选框。当用户单击更改页面时,我希望选中项目的值显示在另一个页面的组件上。在组件2中,当用户单击getcheckeditems时,我会从共享服务中检索要显示的值。但该值为空。
我已经阅读了一些关于堆栈溢出的解决方案,但它不起作用。这里
如何解决这个问题?
组件1按钮
<button (click)="changePage()">Change page</button>
组件2按钮
<button (click)="getChecked()">Get checked items</button>
共享服务.ts
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class SharedService {
checkedItems:any[];
checkedList=new BehaviorSubject<any>([]);
constructor() {
}
setCheckedList(val:any[]){
this.checkedItems=val;
this.checkedList.next(this.checkedItems);
}
getCheckedItems():BehaviorSubject<any>{
return this.checkedList;
}
}
组件1
changePage(){
this.checkedIDs = []
this.checkboxesDataList.forEach((value, index) => {
if (value.isChecked) {
this.checkedIDs.push(value.id);
}
});
this.sharedService.setCheckedList(this.checkedIDs);
this.router.navigate(['/list']);
}
checkboxesDataList = [
{
id: '1',
label: 'name',
isChecked: true
}
]
组件2
getChecked(){
this.items=this.sharedService.getCheckedItems();
console.log(this.items)
}
在shared.services.ts中,更新到
getCheckedItems():BehaviorSubject<any>{
return this.checkedList.getValue();
}
您可以使用getValue((获取BehaviourSubject
的最后一个值。
getChecked() {
this.items = this.sharedService.checkedList.getValue();
}