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
}
不确定我完全理解你的问题,但也许这种方式可以帮助你:
- 像这样将代码添加到 AppComponent 中:
constructor(private cdr: ChangeDetectorRef) {}
public ngOnInit(): void {
fromEvent(document, 'myEventToCdrTrigger').subscribe(() => {
this.cdr.detectChanges();
});
}
- 来自您的自定义函数:
export function frequentlyUsedUtilityFunction() {
const event = document.createEvent('Event');
event.initEvent('myEventToCdrTrigger', true, true);
document.dispatchEvent(event);
}
是否可以在不注入 ApplicationRef 之类的情况下全局触发 angular 变更检测?我想将以下功能用作普通 js 函数而不是服务方法。从而避免在需要功能的地方注入额外的服务。
export function frequentlyUsedUtilityFunction() {
// ... do stuff
// trigger change detection
// get applicationRef or some similar mechanism
const applicationRef = ...
applicationRef.tick();
// ... do more stuff
}
不确定我完全理解你的问题,但也许这种方式可以帮助你:
- 像这样将代码添加到 AppComponent 中:
constructor(private cdr: ChangeDetectorRef) {}
public ngOnInit(): void {
fromEvent(document, 'myEventToCdrTrigger').subscribe(() => {
this.cdr.detectChanges();
});
}
- 来自您的自定义函数:
export function frequentlyUsedUtilityFunction() {
const event = document.createEvent('Event');
event.initEvent('myEventToCdrTrigger', true, true);
document.dispatchEvent(event);
}