【发布时间】:2017-02-02 21:29:24
【问题描述】:
我正在编写一个 Angular 2 应用程序,出于性能原因,我尝试在任何地方使用 ChangeDetectionStrategy.OnPush。我有一个复杂的组件,它需要 OnPush 才能顺利工作,其中包含另一个显示表单的组件(使用 FormBuilder 创建)。我现在注意到,当我点击一个滑块时,它的内部值会更新(即 form.value),但滑块组件不会可视化这个新值,即它卡在旧位置。
我解决此问题的第一个想法是将叶组件的更改检测策略设置为 DEFAULT,但这没有效果,因为显然这也需要更改其父组件的更改检测策略(这在我的应用程序中是不可能的) .
然后我想出了这个主意:
@Component({
...
})
class MyComponent implements OnInit {
constructor(private zone: NgZone) {}
ngOnInit() {
INIT_FORM();
this.form.valueChanges
.subscribe(() => {
this.zone.run(() => {});
});
}
}
但它没有效果。
是否有可能使 angular 2 表单在使用 OnPush 的组件中工作?
【问题讨论】:
-
您需要确保每次发生相关更改时,您的组件使用的
@Inputs 中至少有一个OnPush具有新的引用。关于使整个应用程序使用OnPush的一个很好的指南可以找到here
标签: angular angular2-forms angular2-changedetection