MCPcopy Index your code
hub / github.com/angular/angular / registerDomTrigger

Function registerDomTrigger

packages/core/src/defer/dom_triggers.ts:123–210  ·  view source on GitHub ↗
(
  initialLView: LView,
  tNode: TNode,
  triggerIndex: number,
  walkUpTimes: number | undefined | null,
  registerFn: (
    element: Element,
    callback: VoidFunction,
    injector: Injector,
    options?: O,
  ) => VoidFunction,
  callback: VoidFunction,
  type: TriggerType,
  options?: O,
)

Source from the content-addressed store, hash-verified

121 * @param type Trigger type to distinguish between regular and prefetch triggers.
122 */
123export function registerDomTrigger<O>(
124 initialLView: LView,
125 tNode: TNode,
126 triggerIndex: number,
127 walkUpTimes: number | undefined | null,
128 registerFn: (
129 element: Element,
130 callback: VoidFunction,
131 injector: Injector,
132 options?: O,
133 ) => VoidFunction,
134 callback: VoidFunction,
135 type: TriggerType,
136 options?: O,
137) {
138 if (!shouldTriggerDeferBlock(type, initialLView)) {
139 return;
140 }
141
142 const injector = initialLView[INJECTOR];
143 const zone = injector.get(NgZone);
144 let poll: AfterRenderRef;
145 function pollDomTrigger() {
146 // If the initial view was destroyed, we don't need to do anything.
147 if (isDestroyed(initialLView)) {
148 poll.destroy();
149 return;
150 }
151
152 const lDetails = getLDeferBlockDetails(initialLView, tNode);
153 const renderedState = lDetails[DEFER_BLOCK_STATE];
154
155 // If the block was loaded before the trigger was resolved, we don't need to do anything.
156 if (
157 renderedState !== DeferBlockInternalState.Initial &&
158 renderedState !== DeferBlockState.Placeholder
159 ) {
160 poll.destroy();
161 return;
162 }
163
164 const triggerLView = getTriggerLView(initialLView, tNode, walkUpTimes);
165
166 // Keep polling until we resolve the trigger's LView.
167 if (!triggerLView) {
168 // Keep polling.
169 return;
170 }
171
172 poll.destroy();
173
174 // It's possible that the trigger's view was destroyed before we resolved the trigger element.
175 if (isDestroyed(triggerLView)) {
176 return;
177 }
178
179 const element = getTriggerElement(triggerLView, triggerIndex);
180 const cleanup = registerFn(

Callers 6

ɵɵdeferOnHoverFunction · 0.90
ɵɵdeferPrefetchOnHoverFunction · 0.90
ɵɵdeferOnInteractionFunction · 0.90
ɵɵdeferOnViewportFunction · 0.90

Calls 3

shouldTriggerDeferBlockFunction · 0.90
afterEveryRenderFunction · 0.90
getMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…