Eu gostaria de poder fazer a transição para um estado e passar um objeto arbitrário usando o ui-router.
Estou ciente de que geralmente $stateParams
é usado, mas acredito que esse valor seja inserido no URL e não quero que os usuários possam marcar esses dados como favoritos.
Eu gostaria de fazer algo assim.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
Existe uma maneira de fazer isso sem codificar valores no URL?
Respostas:
Na versão 0.2.13, você deve poder passar objetos para $ state.go,
e, em seguida, acesse o parâmetro no seu controlador.
myParam não aparecerá no URL.
Fonte:
Veja o comentário de christopherthielen https://github.com/angular-ui/ui-router/issues/983 , reproduzido aqui por conveniência:
fonte
transitionTo
também.[object Object]
$stateProvider.state('myState', { url: '/myState/{myParam:json}', params: {myParam: null},...
Veja as notas da versão 0.2.13 e os comentários do código para esse recurso.{ url: '/mystate/{id:[0-9]+}', params: { id: null, myParam: null }, ...
Existem duas partes desse problema
1) usando um parâmetro que não alteraria um URL (usando a propriedade params):
2) passando um objeto como parâmetro: Bem, não há maneira direta de como fazê-lo agora, pois todos os parâmetros são convertidos em string ( EDIT : desde 0.2.13, isso não é mais verdade - você pode usar objetos diretamente), mas você pode contornar isso criando a string por conta própria
e no controlador de destino desserializar o objeto novamente
fonte
Na verdade você pode fazer isso.
Esta é a documentação oficial sobre as opções no state.go
Tudo está descrito lá e, como você pode ver, este é o caminho a ser feito.
fonte
Aliás, você também pode usar o atributo ui-sref em seus modelos para passar objetos
fonte
1)
2)
fonte
Não, o URL sempre será atualizado quando os parâmetros forem passados para
transitionTo
.Isso acontece no state.js: 698 no roteador da interface do usuário .
fonte