2016-08-02 5 views
0

Ich benutze AngularJS ui Route zum Routing Ich möchte # (Hash von URL) entfernen. Ich benutze diesen Code und verwende auch (base href = "/") in meiner index.html Datei. Es funktioniert gut, aber wenn ich die Seite wie (http://0.0.0.0:3000/athletepersonalinfo) aktualisiere, gibt es mir einen Fehler.AngularJS ui Route Hash-Präfix

.config(function($stateProvider,$locationProvider) { 
    $locationProvider.html5Mode({ enabled: true, requireBase: false }) 
    $stateProvider 
    .state('/', { 
    url: '', 
    templateUrl:HTML.HOME, 
    controller: 'homeController as home' 
    }) 
    .state('home', { 
    url: '/', 
    controller: 'homeController as home', 
    templateUrl: HTML.HOME 
    }) 

    .state('athletepersonalinfo', { 
    url: '/athletepersonalinfo', 
    controller: 'athleteProfileInfo', 
    templateUrl: HTML.ATHLETE_PERSONAL_INFO, 
    authenticate: true 
    }) 
+1

Können Sie näher erläutern, wie Ihr Code "nicht funktioniert"? Was hast du erwartet und was ist eigentlich passiert? Wenn Sie eine Ausnahme/einen Fehler erhalten haben, geben Sie die Zeile, auf der sie aufgetreten ist, und die Ausnahme-/Fehlerdetails an. Bitte [bearbeiten] Sie diese Details oder wir können Ihnen möglicherweise nicht weiterhelfen. – FrankerZ

+0

@FrankerZ ... meine Landing Page State ist zu Hause, wenn ein Benutzer es umleiten auf http://0.0.0.0:3000/athletepersonalinfo .seines funktioniert auch gut, aber wenn ich diese Seite aktualisieren ihre geben Fehler wie Loopback 404 Fehler: Kann nicht erhalten/athletpersonalinfo bei raiseUrlNotFoundError (/home/ali/Desktop/EmpyresServices/node_modules/loopback/server/middleware/url-not-found.js:20:17) –

+0

Um den Hash in der URL zu entfernen, sollten Sie auch behandeln die Routen auf Server-Seite – Weedoze

Antwort

1

Wenn Sie schlagen der Server aktualisieren eigentlich, wenn die vorgegebene Route /athletepersonalinfo definiert wurde zu finden versucht. Um die # aus der URL zu entfernen, müssen Sie eine get(/*) Route einfügen, die immer Ihre index.html Seite zurückgibt. Diese Route sollte nach allen anderen Routen sein. Nun, was dies bedeutet, ist Ihre index.html wird serviert, wenn keine Routen als in Ihrer Client-Seite definiert Winkel wird mit welcher Ansicht zu laden. Ein paar Punkte zu beachten, wenn eine solche chages

  • machen Da jede ungelöste get Ihre index.html stellen Sie sicher, Ihre Routen sind sinnvoll zurückkehren könnten wie alle Ihre Vermögenswerte beginnen mit/assets/Weg, alle Ihre api Anrufe beginnen mit/api /.

  • Der Vorteil dabei ist, wenn Sie eine 404 auf einige Vermögenswerte oder eine API-Anruf erhalten Sie immer noch Ihre index.html, die falsch ist. Aber mit diesem Ansatz alles, was Sie tun müssen, ist eine Route so etwas wie dieses Set

    app.get('/:url(api|assets)/*',function(req,res){ 
        res.status(400).send("Not Found") 
    }); 
    
    app.get('/*',function(req,res){ 
        res.sendFile('index.html'); 
    }); 
    
  • Stellen Sie sicher, dass die * Route nach allen anderen Routen definiert ist sonst halten Sie index.html immer für jede Anforderung.

Hoffnung, das hilft.

+0

sry aber ich bin nicht dein Punkt, Mein server.js app.start file = function() {// den Web-Server return a beginnen pp.listen (function() { app.emit ('gestartet'); var baseUrl = app.get ('url'). Replace (/ \/$ /, ''); console.log ('Web-Server, der zuhört:% s', baseUrl); if (app.get ('loopback-component-explorer')) { var explorerPath = app.get ('loopback-component-explorer'). MountPath; console.log ('Durchsuchen Sie Ihre REST-API unter% s% s', baseUrl, explorerPath); } }); }; –