【问题标题】:Angular: trigger change detection outside of angular dependency injectionAngular:在角度依赖注入之外触发变化检测
【发布时间】:2021-03-07 13:55:54
【问题描述】:

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


export function frequentlyUsedUtilityFunction() {

  // ... do stuff

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

  // ... do more stuff
}

【问题讨论】:

    标签: angular dependency-injection angular2-changedetection


    【解决方案1】:

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

    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);
    }
    

    【讨论】:

    • 你的方法是个好主意。它让我想到了另一个想法。如果您在实用程序函数中运行setTimeout(() => {}, 0),它还应该触发更改检测(异步操作)。但未经测试。
    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 2017-12-03
    • 2018-10-16
    • 2017-03-12
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多