Angular:在 angular 依赖注入之外触发变更检测

Angular: trigger change detection outside of angular dependency injection

是否可以在不注入 ApplicationRef 之类的情况下全局触发 angular 变更检测?我想将以下功能用作普通 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);
}