我正在尝试在Angular 6中创建两个组件:一个“复选框”组件,充当普通复选框,以及一个“全选复选框”组件,用于检查/取消选中所有复选框组件 .
为了使这项工作,我使用一个服务,该方法在Subject上发出一个布尔值:
areAllCheckedSource = new Subject<boolean>();
selectAllSingle(checked: boolean) {
this.areAllCheckedSource.next(checked);
}
然后在"select all checkbox"组件中的另一个方法中调用 selectAllSingle()
,并使用内部布尔值作为参数:
multiCheckStatus: boolean;
constructor (private checkService: SelectAllService ) {
}
checkAll() {
this.multiCheckStatus = !this.multiCheckStatus;
this.checkService.selectAllSingle(this.multiCheckStatus);
}
checkAll()
方法绑定到HTML复选框元素的 (change)
属性,在模板中使用:
<input type="checkbox" [checked]="multiCheckStatus" (change)="checkAll()">
最后,“checkbox”组件订阅主题,根据发出的值设置其内部布尔值:
singleCheck: boolean;
constructor(private multiCheckParent: SelectAllService) {
}
ngOnInit() {
this.multiCheckParent.areAllCheckedSource.subscribe( checked => {
this.singleCheck = checked;
});
}
我的问题是复选框组件不会更改以匹配select all组件;我注意到如果我使用BehaviorSubject而不是常规Subject,则会收到作为参数传递的初始布尔值,但后续值不会 .
此处还有一个代码的工作示例:https://stackblitz.com/edit/angular-ecwlua?file=components%2Fselectall%2Fselectall.component.html,组件的选择器用于 app.component.html
中的表中,名称来自 mock.ts
中的数组 .
我对Angular开发很新,我不明白这是否与我使用订阅或一般实现的方式有关 . 谁能帮我?谢谢 .