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

Function registerDestroyHooksIfSupported

packages/core/src/render3/di_setup.ts:254–290  ·  view source on GitHub ↗

* Registers the `ngOnDestroy` hook of a provider, if the provider supports destroy hooks. * @param tView `TView` in which to register the hook. * @param provider Provider whose hook should be registered. * @param contextIndex Index under which to find the context for the hook when it's being invo

(
  tView: TView,
  provider: Exclude<Provider, any[]>,
  contextIndex: number,
  indexInFactory?: number,
)

Source from the content-addressed store, hash-verified

252 * provider factory.
253 */
254function registerDestroyHooksIfSupported(
255 tView: TView,
256 provider: Exclude<Provider, any[]>,
257 contextIndex: number,
258 indexInFactory?: number,
259) {
260 const providerIsTypeProvider = isTypeProvider(provider);
261 const providerIsClassProvider = isClassProvider(provider);
262
263 if (providerIsTypeProvider || providerIsClassProvider) {
264 // Resolve forward references as `useClass` can hold a forward reference.
265 const classToken = providerIsClassProvider ? resolveForwardRef(provider.useClass) : provider;
266 const prototype = classToken.prototype;
267 const ngOnDestroy = prototype.ngOnDestroy;
268
269 if (ngOnDestroy) {
270 const hooks = tView.destroyHooks || (tView.destroyHooks = []);
271
272 if (!providerIsTypeProvider && (provider as ClassProvider).multi) {
273 ngDevMode &&
274 assertDefined(
275 indexInFactory,
276 'indexInFactory when registering multi factory destroy hook',
277 );
278 const existingCallbacksIndex = hooks.indexOf(contextIndex);
279
280 if (existingCallbacksIndex === -1) {
281 hooks.push(contextIndex, [indexInFactory, ngOnDestroy]);
282 } else {
283 (hooks[existingCallbacksIndex + 1] as DestroyHookData).push(indexInFactory!, ngOnDestroy);
284 }
285 } else {
286 hooks.push(contextIndex, ngOnDestroy);
287 }
288 }
289 }
290}
291
292/**
293 * Add a factory in a multi factory.

Callers 1

resolveProviderFunction · 0.85

Calls 6

isTypeProviderFunction · 0.90
isClassProviderFunction · 0.90
resolveForwardRefFunction · 0.90
assertDefinedFunction · 0.90
indexOfMethod · 0.80
pushMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…