Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在编辑模式下停止接收输入_Javascript_Angular_Input_Onchange - Fatal编程技术网

Javascript 如何在编辑模式下停止接收输入

Javascript 如何在编辑模式下停止接收输入,javascript,angular,input,onchange,Javascript,Angular,Input,Onchange,我得到了一个非常简单的例子,表单中有一个@输入元素:可观察的,它每2秒更新一次,因此触发表单组件的onChanges,这会导致意外行为,例如重置值、选定的,等等 对于这种情况,我采用的方法是在编辑模式和查看模式下定义组件,在编辑模式下从可观察的输入中取消订阅,并在查看模式下重新订阅 是否有一种更优雅的,可能是内置的Angular 2方法来处理这种情况 提前感谢,任何帮助都将不胜感激 您可以将角度组件中的更改检测修改为OnPush,以防止不必要地覆盖本地更改 @Component({ ...

我得到了一个非常简单的例子,表单中有一个
@输入元素:可观察的
,它每2秒更新一次,因此触发表单组件的
onChanges
,这会导致意外行为,例如重置
值、选定的
,等等

对于这种情况,我采用的方法是在编辑模式和查看模式下定义组件,在编辑模式下从可观察的输入中取消订阅,并在查看模式下重新订阅

是否有一种更优雅的,可能是内置的
Angular 2
方法来处理这种情况


提前感谢,任何帮助都将不胜感激

您可以将角度组件中的更改检测修改为
OnPush
,以防止不必要地覆盖本地更改

@Component({
  ...
  changeDetection: ChangeDetectionStrategy.OnPush
})
或者,您甚至可以更进一步,仅在需要时手动跟踪更改:

constructor(private cd: ChangeDetectorRef) {}

ngOnInit() {
  this.inputSubject.subscribe((data) => {
    this.inputService.update(data);
    this.cd.markForCheck();
  })
 }
}