Chciałbym móc przejść do stanu i przekazać dowolny obiekt za pomocą routera ui.
Zwykle jestem tego świadomy $stateParams
jest używany, ale uważam, że ta wartość jest wstawiana do adresu URL i nie chcę, aby użytkownicy mogli dodawać te dane do zakładek.
Chciałbym zrobić coś takiego.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
Czy można to zrobić bez kodowania wartości w adresie URL?
Odpowiedzi:
W wersji 0.2.13 powinieneś móc przekazywać obiekty do $ state.go,
a następnie uzyskaj dostęp do parametru w kontrolerze.
myParam nie pojawi się w adresie URL.
Źródło:
Zobacz komentarz christopherthielena https://github.com/angular-ui/ui-router/issues/983 , reprodukowany tutaj dla wygody:
źródło
transitionTo
również z.[object Object]
$stateProvider.state('myState', { url: '/myState/{myParam:json}', params: {myParam: null},...
Zobacz uwagi do wydania 0.2.13 i komentarze do kodu dla tej funkcji.{ url: '/mystate/{id:[0-9]+}', params: { id: null, myParam: null }, ...
Istnieją dwie części tego problemu
1) przy użyciu parametru, który nie zmieniłby adresu URL (przy użyciu właściwości params):
2) przekazanie obiektu jako parametru: Cóż, nie ma bezpośredniego sposobu, jak to zrobić teraz, ponieważ każdy parametr jest konwertowany na ciąg ( EDIT : od 0.2.13, to już nie jest prawdą - możesz używać obiektów bezpośrednio), ale możesz to obejść, tworząc samodzielnie łańcuch
iw kontrolerze docelowym ponownie zdeserializuj obiekt
źródło
Właściwie możesz to zrobić.
To jest oficjalna dokumentacja dotycząca opcji w state.go
Wszystko jest tam opisane i jak widać jest to sposób na zrobienie tego.
źródło
Przy okazji możesz również użyć atrybutu ui-sref w swoich szablonach do przekazywania obiektów
źródło
1)
2)
źródło
Nie, adres URL będzie zawsze aktualizowany po przekazaniu parametrów
transitionTo
.Dzieje się tak na state.js: 698 w routerze ui .
źródło