2016-04-21 16 views
2

Ich habe eine Route konfiguriert, um auf eine Standardseite /patients umleiten, und sonst sendet es den Benutzer an /login. Derzeit, wenn ich zu localhost:<port> navigieren, bekomme ich die Standardseite. Das Problem entsteht dadurch, dass man mit href = '/' auf das Logo klicken möchte. Wenn ich dies tue, wird die Auflösungsfunktion nicht aufgerufen. Es macht im Wesentlichen nichts aus und entfernt die Seitenelemente, die hinter der Authentifizierung leben sollen.Angular href = '/' nicht auflösen

Ist das falsch konfiguriert? Kann mir jemand sagen, was hier passiert? Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank.

+5

Verwenden Sie HTML5Mode? Wenn nicht, sollten Sie wahrscheinlich 'href =" #/"' verwenden. Wenn Sie * HTML5Mode * verwenden, müssen auf dem Server Konfigurationsänderungen vorgenommen werden, damit die relativen href-Verweise korrekt funktionieren. Daher kann die Auflistung Ihres Servers hilfreich sein. – Claies

+0

Arbeitete! Vielen Dank. Wenn Sie die Punkte wollen, setzen Sie Ihren Kommentar in eine Antwort, und ich werde es akzeptieren. – Kraken

+0

Fühlen Sie sich frei, die bereitgestellte Antwort als angenommen zu markieren, wenn Sie denken, dass es hilft. Ich wollte keine Antwort geben, die Hashbang- und HTML5-Modi nicht ausreichend erklärt, was die bereitgestellte Antwort tut. – Claies

Antwort

2

Sie müssen den Link auf '# /' setzen, da Ihr eckiges Routing im Hashbang-Modus arbeitet. Werfen Sie einen Blick auf diese thread für weitere Informationen über Hasband-Modus und HTML5-Modus. Wenn Sie das '#' von Ihren Routen loswerden möchten, versuchen Sie, den HTML5-Modus zu aktivieren.

app.config(['$routeProvider', '$locationProvider' function ($routeProvider, $locationProvider) { 
    $routeProvider. 
     when('/patients', { 
      templateUrl: '/templates/dashboard.html', 
      requireLogin: true, 
      resolve: { 
       auth: function (SessionService) { 
        SessionService.resolve() 
       } 
      } 
     }). 
     when('/', { 
      redirectTo: '/patients' 
     }). 
     otherwise({ 
      redirectTo: '/login' 
     }); 
     $locationProvider 
      .html5Mode(true) 
}]) 

Nur ein Wort der Vorsicht, nach der Aktivierung von HTML5-Modus, direkte Winkel Links können nicht funktionieren: Der Code würde etwas Link mit diesem sein. Sie müssen die Serverkonfiguration ein wenig ändern, um die Links zum Einstiegspunkt in Ihrer Anwendung neu zu schreiben. Wenn Sie ASP.NET verwenden, fügen Sie in Ihrer Datei web.config eine Rewrite-Regel hinzu. Fügen Sie dies unter dem Abschnitt system.webServer

<rewrite> 
    <rule name="HTML5 Compatible Mode" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="/" /> 
    </rule> 
</rewrite> 
+0

Ich verwende nicht HTML5-Modus, und ich beabsichtige nicht, es sofort zu ändern. (größere Fische zum Frittieren) Der Link scheint zu funktionieren, aber meine '' '.when ('/', ...)' '' Klausel besagt, dass a.match keine Funktion ist. Muss ich den Hash auch dort einbinden? – Kraken

Verwandte Themen