如何禁用父级到子级通信中父级组件中的更改检测

时间:2019-01-14 10:32:18

标签: angular angular5

我正在与父母进行孩子之间的交流,并且两者都正在渲染某些数据集。 有一个要求,就是我想在父组件的某个事件的click(click)上禁用更改检测周期,因为该更改不会影响我的孩子。

<button click="myMethod()"></button>
<child-component [somedata] ="somedata"> </child-component>

export ParentComponent {
//methodCall() {
//this method has been called
// i want to disable change detection cycle here}

}

我尝试过较早的ngZone,但是单击后无法停止该循环,只有我们可以按计时器暂停屏幕。 另外ChangeDetectionStrategy.OnPush无法正常工作。请有人帮忙。

2 个答案:

答案 0 :(得分:0)

您应该使用

  

ChnageDetectionStrategy.OnPush

用于此目的的方法。

您可以这样注释子组件:

@Component({
  selector: 'tooltip',
  template: `
    <h1>{{config.position}}</h1>
    {{runChangeDetection}}
  `,
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class TooltipComponent  {

  @Input() config;

  public test() {}
}

OnPush策略可确保仅在此组件的输入属性更改时对此组件运行更改检测。

答案 1 :(得分:0)

创建一些服务,您可以在其中存储数据。在此服务中,将字段添加为可观察到的字段,该字段将发送布尔值。随时随地订阅此观察报。

服务摘要:

  access$ = new BehaviorSubject(true);
  changeAccess(state: boolean) {
    this.access$.next(state);
  }