Skip to content

Commit f65807c

Browse files
Chau TranChau Tran
Chau Tran
authored and
Chau Tran
committed
fix(core): trigger cdr in an animation frame after setting nativeElement on ref
1 parent 5942477 commit f65807c

File tree

1 file changed

+5
-4
lines changed
  • libs/angular-three/src/lib/di

1 file changed

+5
-4
lines changed

libs/angular-three/src/lib/di/ref.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
ApplicationRef,
23
ChangeDetectorRef,
34
DestroyRef,
45
ElementRef,
@@ -30,6 +31,7 @@ export function injectNgtRef<TElement>(
3031
injector = assertInjectionContext(injectNgtRef, injector);
3132
return runInInjectionContext(injector, () => {
3233
const cdr = inject(ChangeDetectorRef);
34+
const appRef = inject(ApplicationRef);
3335
const ref = is.ref(initial) ? initial : new ElementRef<TElement>(initial as TElement);
3436
const signalRef = createSignal(ref.nativeElement);
3537
const readonlySignal = signalRef.asReadonly();
@@ -59,15 +61,14 @@ export function injectNgtRef<TElement>(
5961
set: (newElement) => {
6062
if (newElement !== untracked(signalRef)) {
6163
signalRef.set(newElement);
62-
safeDetectChanges(cdr);
64+
// trigger CDR
65+
requestAnimationFrame(() => void safeDetectChanges(cdr));
6366
}
6467
},
6568
get: () => readonlySignal(),
6669
});
6770

68-
Object.defineProperty(ref, 'untracked', {
69-
get: () => untracked(readonlySignal),
70-
});
71+
Object.defineProperty(ref, 'untracked', { get: () => untracked(readonlySignal) });
7172

7273
return Object.assign(ref, { children }) as NgtInjectedRef<TElement>;
7374
});

0 commit comments

Comments
 (0)