AngularJS: Wie können Abfrageparameter in der URL gelöscht werden?
Meine AngularJS-Anwendung benötigt Zugriff auf das user-Profil bei LinkedIn. Um dies zu tun, muss ich leiten den Benutzer auf eine LinkedIn-URL enthält einen Rückruf redirect_uri-parameter, die sagen, dass LinkedIn leitet den Benutzer zurück zu meiner webapp und fügen Sie eine "code" Abfrage-Parameter in der URL. Es ist ein traditionelles Oauth 2.0 fließen.
Alles funktioniert Super, außer dass LinkedIn leitet den Benutzer zurück zu der folgenden URL:
http://localhost:8080/?code=XXX&state=YYY#/users/123/providers/LinkedIn/social-sites
Möchte ich entfernen ?code=XXX&state=YYY
aus der URL, um es zu reinigen. Der Benutzer muss sich nicht um die query-Parameter, die ich erhielt von LinkedIn umleiten.
Versuchte ich $location.absUrl($location.path() + $location.hash()).replace()
aber halten Sie die Abfrage-Parameter in der URL.
Ich bin auch nicht in der Lage, extrahieren Sie die Abfrage-Parameter, z.B. "code", mit ($location.search()).code
.
Wie es scheint, haben ? vor dem # in der URL oben ist Täuschung Eckig.
InformationsquelleAutor der Frage alecswan | 2013-06-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benutze ich
Als diese nicht löscht nur meinen Schlüssel, aber entfernt es aus der Sicht der URL.
InformationsquelleAutor der Antwort Julius
Bekam ich dann die Antwort von AngularJS forum. Sehen dieser thread für details
Link zu einer Google-Groups thread, das ist schwer zu Lesen und nicht bieten eine klare Antwort. Entfernen URL-Parameter verwenden
InformationsquelleAutor der Antwort alecswan
Entfernen ALLE query Parameter tun:
Entfernen EINE insbesondere die query-parameter, Aktionen:
InformationsquelleAutor der Antwort Rahul Desai
Deaktivieren Sie ein Element löschen Sie es und rufen Sie $$Komponieren
abgeleitet von angularjs Quelle : https://github.com/angular/angular.js/blob/c77b2bcca36cf199478b8fb651972a1f650f646b/src/ng/location.js#L419-L443
InformationsquelleAutor der Antwort basarat
Löschen so löschen Sie eine bestimmte query-parameter mithilfe:
Oder Sie können deaktivieren Sie alle query params durch die Einstellung suchen, um ein leeres Objekt:
InformationsquelleAutor der Antwort Quintin
In der Zeit des Schreibens, und wie bereits erwähnt von @Bosh,
html5mode
musstrue
um einstellen zu können$location.search()
habe und es spiegelt zurück in das Fenster der visual-URL.Sehen https://github.com/angular/angular.js/issues/1521 für mehr info.
Aber wenn
html5mode
isttrue
können Sie ganz einfach deaktivieren Sie die URL-Abfragezeichenfolge mit:oder
Diese ändern auch die Fenster der visual-URL.
(Getestet in AngularJS version
1.3.0-rc.1
mithtml5Mode(true)
.)InformationsquelleAutor der Antwort Fredric
Brauchen, um es zu arbeiten, wenn
html5mode
=false
?Alle anderen Antworten, die funktionieren nur, wenn Sie Eckig ist
html5mode
isttrue
. Wenn Sie arbeiten außerhalb derhtml5mode
dann$location
bezieht sich nur auf die "falschen" Ort, dass das Leben in Ihrem hash-und so$location.search
nicht sehen kann/edit/Korrektur der aktuellen Seite suchen params.Hier ist eine Abhilfe, die eingefügt werden soll, in den HTML-Code der Seite vor kantigen Lasten:
InformationsquelleAutor der Antwort Bosh
Verwenden Sie einfach
Statt
InformationsquelleAutor der Antwort kevinius
Wenn Sie möchten, um zu einer anderen URL, und deaktivieren Sie die Abfrage-Parameter nur verwenden:
InformationsquelleAutor der Antwort luizfelippe
Wenn Sie mit Routen, die Parameter klar nur $routeParams
InformationsquelleAutor der Antwort Oswaldo Alvarez
Wie etwa nur die Einstellung der location-hash auf null
InformationsquelleAutor der Antwort Bwyss
wenn Sie die Parameter sofort und verschieben Sie dann auf der nächsten Seite, können Sie setzen ein Fragezeichen am Ende des neuen Standortes.
zum Beispiel, wenn Sie getan haben würde,
$Ort.Pfad('/nextPage');
können Sie dies tun, statt:
$Ort.Pfad('/nextPage?');
InformationsquelleAutor der Antwort user5487176
Habe ich versucht, die oben genannten Antworten aber konnte Sie nicht bekommen, um zu arbeiten. Der einzige code, der für mich gearbeitet wurde
$window.location.search = ''
InformationsquelleAutor der Antwort Gwen Au
Kann ich ersetzen alle query-Parameter mit dieser einzigen Zeile:
$location.search({});
Leicht zu verstehen und einfach Weg, um Sie zu löschen.
InformationsquelleAutor der Antwort Lucas Reppe Welander
Die akzeptierte Antwort, die für mich gearbeitet, aber ich brauchte, um ein wenig tiefer Graben, um die Probleme zu beheben mit der zurück-Taste.
Was mir aufgefallen ist, dass wenn ich einen link zu einer Seite mit
<a ui-sref="page({x: 1})">
entfernen Sie dann den Abfrage-string mit$location.search('x', null)
ich nicht ein extra Eintrag in meinem browser-history, also die zurück-Taste bringt mich zurück zu wo ich angefangen habe. Obwohl ich glaube, das ist falsch, denn ich glaube nicht, dass Winkel sollte automatisch entfernen Sie diese Geschichte Eintrag für mich, das ist eigentlich das gewünschte Verhalten für meinen speziellen use-case.Das problem ist, dass wenn ich einen link zu der Seite mit der
<a href="/page/?x=1">
statt, dann entfernen Sie die query-string in der gleichen Weise, ich tun bekommen einen extra-Eintrag in meinem browser-history, so dass ich auf die zurück-Taste zweimal zurück, wo ich angefangen habe. Das ist widersprüchlich Verhalten, aber eigentlich ist dies scheint mehr richtig.Ich leicht beheben können das problem mit
href
Verknüpfungen mit$location.search('x', null).replace()
noch, aber dann bricht die Seite, wenn Sie auf Ihr land, über eineui-sref
link, so ist dies kein gut.Nach viel hantieren, ist dies die Korrektur, die ich kam mit:
In meiner app
run
- Funktion, die ich Hinzugefügt:Dann habe ich diesen code verwenden, um entfernen Sie die Abfrage-string parameter:
InformationsquelleAutor der Antwort Moo