2016-12-01 2 views
1

Ich muss die URL ändern, nachdem ich ein neues Fenster geöffnet und zu einem Status navigiert habe.URL in einer Winkelumgebung ersetzen

Meine Startseite sieht so aus:
localhost:8000/startpage.html.
Beim Laden der URL wird
localhost:8000/startpage.html#/.
Im neuen Fenster navigiere ich in einen neuen Zustand:
localhost:8000/startpage.html#/newstate.

Ich möchte, dass die URL wie folgt aussieht:
localhost:8000/startpage.html?project=1#/newstate. fast korrekte Ergebnisse, außer dass

Ich erhalte stattdessen die URL ersetzt vollständig fügt es
?project=1#/newstate zu localhost:8000/startpage.html#/.

So ist das Ergebnis etwas wie folgt aus:
localhost:8000/startpage.html#/%3Fproject=903%23/newstate
während das, was ich brauche, ist:
localhost:8000/startpage.html?project=903#/newstate

Hier einige relevante Code ist:

if ($window.history.replaceState) { 
    var newUrl = '?project=903' + '#/case'; 
    $location.path(newUrl); 
    $location.replace(); 
}; 

mir scheint, ich zwei habe Probleme. Extra '# /' nach '.html' und die URL ist verschlüsselt. Denn selbst wenn ich extra '# /' entferne, funktioniert es immernoch nicht, wenn ich codierte Zeichen nicht durch echte ersetzen will. Bitte helfen.

Dank

+0

es ist nicht wirklich klar, was Sie hier versuchen zu erreichen.das '#' bezeichnet den Teil, der von Angular behandelt wird, gegenüber dem Teil, der vom Server gehandhabt wird. Eine URL wie "localhost: 8000/startpage.html? Project = 1 #/newstate" schlägt vor, dass Sie "project = 1" an Ihren Server senden und eine neue Seite zurücksenden lassen möchten, die eine neue eckige App haben würde. welches dann auf den 'newstate' gerichtet wird. Das scheint ziemlich umständlich zu sein ... – Claies

Antwort

2

Ich denke, Sie verwenden die falsche Methode. Sie möchten $location.url verwenden, mit dem Sie die Werte path, query und hash auf einmal festlegen können. Aber Sie können besser die query und hash separat einstellen, da Sie nicht die gesamte URL ändern müssen.

$location.search('project', '903'); 
$location.hash('case'); 

Ich entfernte die / vom hash weil es nicht notwendig ist.

Standardmäßig verwendet eckig den Hash-Modus, um seine Routen zu navigieren. Wenn Sie einen Hash bereitstellen möchten, müssen Sie dieses Verhalten ausschalten.

$locationProvider.html5Mode(true); 

Legen Sie das in der Konfiguration Ihrer Anwendung fest.

Hier ist ein guter Artikel: https://scotch.io/tutorials/pretty-urls-in-angularjs-removing-the-hashtag

+0

Nein, dann sieht es so aus: localhost: 8000/startpage.html #/case? Project = 903 #% 2Fcase – Mark

+0

Fügen Sie versehentlich '#' manuell hinzu, wenn Sie '$ aufrufen location.hash'? –

+0

Nein, ich habe nur diese zwei Zeilen: $ location.search ('project', '903'); $ location.hash ('Fall'); – Mark

1

Mit AngularJS 1 das Zeichen # in der Regel die Seite, die die ngApp Richtlinie lädt folgt ... pls mich korrigieren, wenn ich falsch bin.

Also ich denke, die einzige Lösung für das heißt ngApp Richtlinie auf der Seite Link haben, wo Sie den # Tag wollen erscheinen ...

Es ist eine tho sehr schlechte Praxis.