我正在尝试在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开发很新,我不明白这是否与我使用订阅或一般实现的方式有关 . 谁能帮我?谢谢 .