Angular:在角度依赖注入之外触发变化检测

问题描述

是否可以在不注入 ApplicationRef 之类的情况下全局触发角度变化检测?我想将以下功能用作普通的 js 函数而不是服务方法。从而避免在需要该功能的地方注入额外的服务。


export function frequentlyUsedUtilityFunction() {

  // ... do stuff

  // trigger change detection
  // get applicationRef or some similar mechanism
  const applicationRef = ...
  applicationRef.tick();

  // ... do more stuff
}

解决方法

不确定我完全理解你的问题,但也许这种方式可以帮助你:

  1. 将代码添加到 AppComponent 中,如下所示:
constructor(private cdr: ChangeDetectorRef) {}

public ngOnInit(): void {
  fromEvent(document,'myEventToCdrTrigger').subscribe(() => {
    this.cdr.detectChanges();
  });
}
  1. 来自您的自定义函数:
export function frequentlyUsedUtilityFunction() {
  const event = document.createEvent('Event');
  event.initEvent('myEventToCdrTrigger',true,true);
  document.dispatchEvent(event);
}