Se você deseja passar o estado que não é da URL, não deve usá-lo url
ao configurar o seu state
. Encontrei a resposta em um PR e fiz algumas pesquisas para entender melhor.
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
Então você pode navegar para ele da seguinte maneira:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
Ou:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
E em HTML assim:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
Esse caso de uso é completamente descoberto na documentação, mas acho que é um meio poderoso de fazer a transição do estado sem usar URLs.
params
matriz.{referer: true, param2: true, etc: true}
A solução de Nathan Matthews não funcionou para mim, mas é totalmente correta, mas há pouco sentido em chegar a uma solução alternativa:
O ponto principal é: O tipo de parâmetros definidos e os toParamas de $ state.go devem ser o mesmo array ou objeto nos dois lados da transição de estado.
Por exemplo, quando você define um parâmetro no estado da seguinte maneira, significa que o parâmetro é matriz por usar "[]":
Então você também deve passar paraParams como um array como este:
E você pode acessá-los via $ stateParams como uma matriz como esta:
Uma solução melhor é usar objeto em vez de matriz nos dois lados :
Substituí [] por {} na definição de parâmetros. Para passar toParams para $ state.go, você também deve usar object em vez de array:
então você pode acessá-los via $ stateParams facilmente:
fonte
params: {'index', 'anotherKey'},
porparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
outro não é um objeto javascript válidoTudo o que eu precisava fazer era adicionar um parâmetro à definição do estado da URL, assim
Doh!
fonte
/toState/:referer
sintaxe é usar em$location.path()
vez de$state.go()
.Não tenho certeza se funcionará com o AngularJS v1.2.0-rc.2 com o ui-router v0.2.0. Testei esta solução no AngularJS v1.3.14 com o ui-router v0.2.13.
Acabei de perceber que não é necessário passar o parâmetro na URL, como recomenda a gwhn.
Basta adicionar seus parâmetros com um valor padrão na sua definição de estado. Seu estado ainda pode ter um valor de URL.
e adicione o parâmetro a
$state.go()
fonte
Nenhum desses exemplos nesta página funcionou para mim. Isto é o que eu usei e funcionou bem. Algumas soluções disseram que você não pode combinar URL com $ state.go (), mas isso não é verdade. O estranho é que você deve definir os parâmetros para o URL e também listar os parâmetros. Ambos devem estar presentes. Testado no Angular 1.4.8 e no UI Router 0.2.15.
No estado, adicione seus parâmetros ao final do estado e defina os parâmetros:
No seu controlador, sua instrução go será assim:
Em seguida, retire os parâmetros e use-os no controlador do seu novo estado (não esqueça de passar $ stateParams para a função do controlador):
fonte
No meu caso, tentei com todas as opções fornecidas aqui, mas ninguém estava funcionando corretamente (angular 1.3.13, iônico 1.0.0, angular-ui-router 0.2.13). A solução foi:
e no state.go:
Felicidades
fonte
Passei bastante tempo lutando com o $ state & $ stateParams da Ionic / Angular;
Para utilizar $ state.go () e $ stateParams, você deve ter algumas coisas configuradas e outros parâmetros não devem estar presentes.
No meu app.config (), incluí o $ stateProvider e defini nele vários estados:
A
params
chave é especialmente importante. Além disso, observe que NÃO háurl
chaves presentes ... utilizando stateParams e URLs NÃO se misturam. Eles são mutuamente exclusivos.Na chamada $ state.go (), defina-a da seguinte forma:
As variáveis
index
eanotherKey
$ stateParams SOMENTE serão preenchidas se forem listadas pela primeira vez naparams
chave de definição $ stateController .Dentro do controlador, inclua $ stateParams conforme ilustrado:
As variáveis passadas devem estar disponíveis!
fonte
Tente com
reload: true
?Não conseguia descobrir o que estava acontecendo há mais tempo - eu estava me enganando. Se você tiver certeza de que as coisas foram escritas corretamente e usará o mesmo estado, tente
reload: true
:Espero que isso economize seu tempo!
fonte
Eu tinha enfrentado um problema semelhante. Acabei com uma solução funcional depois de muito pesquisar, testar e testar. Aqui está a minha solução que funcionaria para você.
Eu tenho dois controladores - searchBoxController e stateResultController e um parâmetro chamado searchQuery a ser passado de uma exibição com uma caixa de pesquisa para uma exibição mostrando os resultados buscados em um servidor remoto. É assim que se faz:
Abaixo está o controlador a partir do qual você chama a próxima visualização usando
$state.go()
Abaixo está o estado que seria chamado quando a
$state.go()
execução fosse :E, finalmente, o controlador associado ao
app.searchResults
estado:fonte
E no meu caso de um estado pai / filho. todos os parâmetros declarados no estado filho devem ser conhecidos pelo estado pai
fonte
A solução que chegamos a ter um estado com dois parâmetros estava mudando:
para
fonte
Você define o seguinte em router.js
Seu controlador precisa adicionar $ stateParams.
Você pode enviar um objeto por parâmetro da seguinte maneira.
fonte
Eu estava tentando navegar da página 1 para a 2 e também precisava passar alguns dados.
No meu router.js , adicionei nome e idade dos parâmetros :
Na Página1 , clique no botão Avançar:
Em Page2 , eu poderia acessar esses parâmetros:
fonte
Se esse é um parâmetro de consulta que você deseja passar assim:
/toState?referer=current_user
então você precisa descrever seu estado assim:
source: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
fonte