【问题标题】:OnPush change detection when using a FormArray in a service在服务中使用 FormArray 时的 OnPush 更改检测
【发布时间】:2021-08-04 17:30:53
【问题描述】:
【问题讨论】:
标签:
angular
angular-reactive-forms
angular2-forms
angular2-changedetection
angular-changedetection
【解决方案1】:
ChangeDetectionStrategy.OnPush 停止自动更改检测,就像您所经历的那样。它的用例主要是输入/输出组件;它告诉他们仅在 @Input 更改时检测更改。
话虽如此,当我查看您的代码时,
- 您没有
@Input 组件
- 您的组件没有父/子关系
- 您正在进行全球运营
然后您停止自动更改检测。在这种情况下,您必须告诉 Angular 需要检测到更改。
所以不,它不是 hacky,是的,它可以正常工作。
尽管如此,如果您想避免所有这些并希望您的代码更具反应性,您可以使用 observables/subjects。这是一个例子:
export class ShoppingListService {
shoppingListForm: BehaviorSubject<FormArray> = new BehaviorSubject(
this.fb.array([])
);
<ng-container *ngIf="shoppingListService.shoppingListForm | async as shoppingListForm">
<div class="course-item" *ngFor="let shoppingListItem of shoppingListForm.controls">
<p>{{ shoppingListItem.value | json }}</p>
</div>
</ng-container>
Stackblitz