File

/home/workflows/workspace/libs/common/router-ext/src/lib/fragment-link/fragment-link.directive.ts

Description

Simpler version of RouterLink that only navigates to a different fragments. Must be used on <a> or <area> elements.

Metadata

Index

Methods
Inputs

Inputs

fragment
Required :  true
Default value : { alias: 'hraFragmentLink', transform: stripLeadingHash }

Url fragment (with or without a leading #)

Methods

onClick
onClick(event: MouseEvent)

Perform a navigation in response to a click event

Parameters :
Name Type Optional Description
event MouseEvent No

Click event

Returns : boolean

true if the default handler should run, false otherwise

import { Directive, input } from '@angular/core';
import { stripLeadingHash } from '@hra-ui/common/url';
import { injectRouter } from '../injectors';
import { isAuxClick } from '../util/event';

/**
 * Simpler version of `RouterLink` that only navigates to a different fragments.
 * Must be used on `<a>` or `<area>` elements.
 */
@Directive({
  selector: 'a[hraFragmentLink], area[hraFragmentLink]',
  host: {
    '[attr.href]': '"#" + fragment()',
    '(click)': 'onClick($event)',
  },
})
export class FragmentLinkDirective {
  /** Url fragment (with or without a leading #) */
  readonly fragment = input.required({ alias: 'hraFragmentLink', transform: stripLeadingHash });

  /** Reference to the router */
  private readonly router = injectRouter({ optional: true });

  /**
   * Perform a navigation in response to a click event
   *
   * @param event Click event
   * @returns true if the default handler should run, false otherwise
   */
  onClick(event: MouseEvent): boolean {
    const { fragment, router } = this;
    if (!router || isAuxClick(event)) {
      return true;
    }

    router.navigate([], { fragment: fragment() });
    return false;
  }
}

results matching ""

    No results matching ""