首页 文章

Angular 2形成OnPush

提问于
浏览
2

我正在编写一个角度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(() => {});
    });
  }
}

但它没有效果 .

是否有可能使角度2形式在使用OnPush的组件内工作?

1 回答

  • 1

    没有自己测试,但手动调用更改检测可能会做你想要的:

    @Component({
       ...
    })
    class MyComponent implements OnInit {
      constructor(private cdRef: ChangeDetectorRef) {}
    
    ngOnInit() {
      INIT_FORM();
    
      this.form.valueChanges
        .subscribe(() => {
          this.cdRef.detectChanges();
        });
      }
    }
    

相关问题