2017-04-07 7 views
4

Griff Wenn jeden Anker Link klicken, die ein href='#' hat, den Winkel Router WegAngular 2, Anker-Links mit href = '#'

{ path: '', component: NologinComponent, pathMatch: 'full' } 

abgestimmt ist, Wie soll ich diese Anker-Links, so dass die Ankerstange mit href='#' bleibt auf der gleichen Seite, dh nichts tun.

Beispiel Ankertag

<a class="title-logo" href="#"><img src="/Content/Images/Image1.png"></a>

Ein weiterer Punkt zu berücksichtigen, i, so dass die <base href="/" /> in der Layoutseite verwendet haben, auf Refresh-Winkel bleibt auf der aktuellen Seite und suchen Sie die Ressourcen von „/“ nicht von innerhalb der aktuellen Komponente.

+0

Was genau ist der Punkt von 'href =" # "'? Oder meinst du 'href =" # etwas "? – zeroflagL

+0

@zeroflagL nehme an, ich habe einige Links, für die die href nicht definiert wurde, zum Beispiel die Privacy-Seite, also habe ich sie behalten #, so dass beim Klicken auf diesen Link nichts passieren sollte, sondern stattdessen auf Login-Seite – Rex

Antwort

6

Es gibt ein paar Optionen sind:

Option 1:

Aufschalten href Attribut mit einer Richtlinie:

@Directive({ 
    selector : '[href]', 
    host : { 
    '(click)' : 'doNothing($event)' 
    } 
}) 
export class MyLinkDirective { 
    @Input() href: string; 

    doNothing(event) { 
    if(this.href.length === 0 || this.href === '#') { 
     event.preventDefault(); 
    } 
    } 
} 

Source

Ich persönlich mag diese Lösung, weil es ist global und eckig. Hier ist eine plunker.


Option 2

Sie CSS verwenden können und Graben die href alle zusammen Attribut:

a { 
    cursor: pointer; 
    user-select: none; 
} 

Dann Ihrer inaktiven Links wäre:

<a class="title-logo"><img src="/Content/Images/Image1.png"></a> 

Option 3

CSS pointer-events:

a.noop { 
    pointer-events: none; 
} 

Nutzungs

<a class="title-logo noop" href="#"><img src="/Content/Images/Image1.png"></a> 

pointer-events kann Probleme auf einigen (vor allem ältere) Browsern verursachen, wenn Sie uns um sie kümmern. Sie können die Kompatibilitätsliste here sehen.

+0

Ich habe die Option 1 von der ursprünglichen Quelle betrachtet, aber es hat nicht funktioniert, können Sie versuchen, einen Plünderer – Rex

+0

@VinaySingh meine Überprüfung zu überprüfen. –

3

Versuchen Sie, diese

href='javascript:void(0);' 
+2

@ promod ich habe mehrere Anker-Links, ich werde nicht alle von ihnen mit diesem ersetzen, auch ich möchte dies in einer generischen zentralisierten Art und Weise behandeln – Rex

1

Da diese Funktionalität Hinzufügen heikel ist, empfehle ich Ihnen nicht das Rad neu zu erfinden, einen Blick auf ng2-page-scroll nehmen. Wenn Sie mehr untersuchen möchten, sollten Sie die Router & Navigation Guide lesen.

+0

Ich mache nicht die Seite scrollt, das Problem ist einfach mit jedem Klick für die eine Verknüpfung ist nicht definiert. – Rex

+0

In diesem Fall können Sie keine Ankerlinks verwenden. Wenn Sie beim Klick etwas auslösen möchten, müssen Sie das [click event] (https://angular.io/docs/ts/latest/guide/user-input.html#!#sts_src%2Fapp%2Fclick- me.component.ts). Wenn Sie etwas mit Angular erstellen, müssen Sie daran denken, dass Sie keine einfache statische HTML-Seite erstellen. –