(
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,
)
| 121 | * @param type Trigger type to distinguish between regular and prefetch triggers. |
| 122 | */ |
| 123 | export 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( |
no test coverage detected
searching dependent graphs…