Wenn Sie den Nicht-URL-Status übergeben möchten, dürfen Sie ihn url
beim Einrichten nicht verwenden state
. Ich fand die Antwort in einer PR und machte ein paar Affen, um besser zu verstehen.
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
Dann können Sie wie folgt dorthin navigieren:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
Oder:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
Und in HTML also:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
Dieser Anwendungsfall wird in der Dokumentation vollständig aufgedeckt, aber ich denke, er ist ein leistungsstarkes Mittel, um den Status ohne Verwendung von URLs zu ändern.
params
Array aufgenommen werden.{referer: true, param2: true, etc: true}
Die Lösung von Nathan Matthews hat bei mir nicht funktioniert, ist aber völlig korrekt, aber es macht wenig Sinn, eine Problemumgehung zu erreichen:
Der entscheidende Punkt ist: Der Typ der definierten Parameter und toParamas von $ state.go sollte auf beiden Seiten des Zustandsübergangs dasselbe Array oder Objekt sein.
Wenn Sie beispielsweise einen Parameter in einem Status wie folgt definieren, bedeutet dies, dass der Parameter aufgrund der Verwendung von "[]" ein Array ist:
Daher sollten Sie auch Params als Array wie folgt übergeben:
Und Sie können über $ stateParams als Array wie folgt darauf zugreifen:
Eine bessere Lösung ist die Verwendung von Objekt anstelle von Array auf beiden Seiten :
Ich habe [] in der Parameterdefinition durch {} ersetzt. Um toParams an $ state.go zu übergeben, sollten Sie auch object anstelle von array verwenden:
dann können Sie einfach über $ stateParams darauf zugreifen:
quelle
params: {'index', 'anotherKey'},
mitparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
ansonsten ist es kein gültiges Javascript - ObjektAlles, was ich tun musste, war einen Parameter wie folgt zur URL-Statusdefinition hinzuzufügen
Doh!
quelle
/toState/:referer
Syntax zum Laufen zu bringen, ist die Verwendung von$location.path()
anstelle von$state.go()
.Ich bin mir nicht sicher, ob es mit AngularJS v1.2.0-rc.2 mit ui-router v0.2.0 funktioniert. Ich habe diese Lösung auf AngularJS v1.3.14 mit ui-router v0.2.13 getestet.
Mir ist nur klar, dass es nicht notwendig ist, den Parameter in der URL zu übergeben, wie von gwhn empfohlen.
Fügen Sie einfach Ihre Parameter mit einem Standardwert in Ihrer Statusdefinition hinzu. Ihr Bundesstaat kann weiterhin einen URL-Wert haben.
und fügen Sie den Parameter hinzu
$state.go()
quelle
Keines dieser Beispiele auf dieser Seite hat bei mir funktioniert. Das habe ich benutzt und es hat gut funktioniert. Einige Lösungen sagten, dass Sie URL nicht mit $ state.go () kombinieren können, aber dies ist nicht wahr. Das Unangenehme ist, dass Sie die Parameter für die URL definieren und auch die Parameter auflisten müssen. Beides muss vorhanden sein. Getestet auf Angular 1.4.8 und UI Router 0.2.15.
Im Zustand Ihre params zu Ende Zustand hinzufügen und definieren Sie die params:
In Ihrem Controller sieht Ihre go-Anweisung folgendermaßen aus:
Ziehen Sie dann die Parameter heraus und verwenden Sie sie im Controller Ihres neuen Status (vergessen Sie nicht, $ stateParams an Ihre Controller-Funktion zu übergeben):
quelle
In meinem Fall habe ich es mit allen hier angegebenen Optionen versucht, aber niemand hat richtig funktioniert (Angular 1.3.13, Ionic 1.0.0, Angular-UI-Router 0.2.13). Die Lösung war:
und im state.go:
Prost
quelle
Ich habe viel Zeit damit verbracht, mit Ionic / Angulars $ state & $ stateParams;
Um $ state.go () und $ stateParams verwenden zu können, müssen bestimmte Dinge eingerichtet sein und andere Parameter dürfen nicht vorhanden sein.
In meiner app.config () habe ich $ stateProvider eingefügt und darin mehrere Zustände definiert:
Der
params
Schlüssel ist besonders wichtig.url
Beachten Sie auch, dass KEINE Schlüssel vorhanden sind. Wenn Sie stateParams verwenden und URLs NICHT mischen. Sie schließen sich gegenseitig aus.Definieren Sie den Aufruf von $ state.go () als solchen:
Die Variablen
index
undanotherKey
$ stateParams werden NUR ausgefüllt, wenn sie zuerst imparams
Definitionsschlüssel $ stateController aufgeführt werden .Fügen Sie im Controller $ stateParams wie folgt ein:
Die übergebenen Variablen sollten verfügbar sein!
quelle
Versuchen Sie es mit
reload: true
?Konnte nicht herausfinden, was am längsten vor sich ging - es stellte sich heraus, dass ich mich selbst betrogen hatte. Wenn Sie sicher sind, dass die Dinge richtig geschrieben sind und Sie denselben Status verwenden möchten, versuchen Sie Folgendes
reload: true
:Hoffe das spart dir Zeit!
quelle
Ich hatte ein ähnliches Problem. Nach vielem googeln und Ausprobieren hatte ich eine funktionierende Lösung. Hier ist meine Lösung, die für Sie funktionieren würde.
Ich habe zwei Controller - searchBoxController und stateResultController und einen Parameter namens searchQuery , der von einer Ansicht mit einem Suchfeld an eine Ansicht übergeben werden soll, in der die von einem Remote-Server abgerufenen Ergebnisse werden. Das ist wie man es macht:
Unten sehen Sie den Controller, von dem aus Sie die nächste Ansicht mit aufrufen
$state.go()
Unten ist der Zustand, der aufgerufen werden würde, wenn die
$state.go()
ausgeführt wird:Und schließlich der dem
app.searchResults
Staat zugeordnete Controller :quelle
Und in meinem Fall eines Eltern / Kind-Staates. Alle im untergeordneten Status deklarierten Parameter müssen dem übergeordneten Status bekannt sein
quelle
Die Lösung für einen Zustand mit zwei Parametern war die Änderung:
zu
quelle
Sie definieren Folgendes in router.js
Ihr Controller muss $ stateParams hinzufügen.
Sie können ein Objekt wie folgt per Parameter senden.
quelle
Ich habe versucht, von Seite 1 nach Seite 2 zu navigieren, und ich musste auch einige Daten übergeben.
In meiner router.js habe ich den Namen und das Alter der Parameter hinzugefügt :
In Seite1 , onClick der nächsten Taste:
In Seite 2 konnte ich auf folgende Parameter zugreifen:
quelle
Wenn dies ein Abfrageparameter ist, den Sie wie folgt übergeben möchten:
/toState?referer=current_user
dann müssen Sie Ihren Zustand folgendermaßen beschreiben:
Quelle: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
quelle