Comment envoyer et de récupérer des paramètres à l'aide de $état.aller toParams et $stateParams?
Je suis en utilisant AngularJS v1.2.0-rc.2 avec ui-router v0.2.0. Je veux passer le référent état à un autre état, donc j'utilise la toParams
de $state.go
comme suit:
$state.go('toState', {referer: $state.current.name});
Selon la docs, ce qui devrait remplir la $stateParams
sur le toState
contrôleur, mais il est undefined
. Ce qui me manque?
J'ai créé un débarquez à démontrer:
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez passer des non-URL de l'état, alors vous ne devez pas utiliser
url
lors de la configuration de votrestate
. J'ai trouvé la réponse sur un PR et fait quelques monkeying autour pour mieux comprendre.Ensuite, vous pouvez accéder comme suit:
Ou:
Et en HTML, comme ceci:
Ce cas d'utilisation est complètement à découvert dans la documentation, mais je pense que c'est un moyen puissant sur la transition de l'état sans l'aide d'Url.
params
tableau.{referer: true, param2: true, etc: true}
thingies
venir de là? Je suis absent de la façon de l'utiliser dans le fichier de modèlethingies
est un tableau d'objets qui correspondent aux propriétés de laparams
objet que vous souhaitez passer à la nouvelle état. Dans les exemples ci-dessus, ce$state.go('toState', result);
est égal à ceui-sref="toState(thingy)"
toParams
via$state.go()
, j'ai juste eu à définir lesparams
propriété de l'état correctement, et a réussi à garder leurl
propriété très bien.L'Nathan Matthews solution ne fonctionne pas pour moi, mais il est tout à fait correcte, mais il y a peu de point de parvenir à une solution de contournement:
Le point clé est: Type de paramètres définis et toParamas de $état.aller doit être le même tableau ou d'un objet sur les deux côtés de l'état de transition.
Par exemple, lorsque vous définissez un params dans un état comme suit signifie que vous params est tableau en raison de l'aide "[]":
Donc, aussi vous devez passer toParams sous forme de tableau comme ceci:
Et vous pouvez y accéder via $stateParams sous forme de tableau comme ceci:
Meilleure solution est d'utiliser un objet de tableau dans les deux côtés:
J'ai remplacé [] avec {} dans les params de définition. Pour le passage de toParams de dollars à l'état.allez aussi vous devez à l'aide de l'objet au lieu de tableau:
alors vous pouvez y accéder via $stateParams facilement:
params: {'index', 'anotherKey'},
avecparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
sinon elle n'est pas valide d'un objet javascriptTout ce que j'avais à faire était d'ajouter un paramètre à l'url de la définition de l'état comme
Doh!
/toState/:referer
la syntaxe à utiliser$location.path()
au lieu de$state.go()
.Ne sais pas si cela fonctionnera avec AngularJS v1.2.0-rc.2 avec ui-router v0.2.0.
J'ai testé cette solution sur AngularJS v1.3.14 avec ui-router v0.2.13.
Je viens de réaliser que c'est pas nécessaire de passer le paramètre dans l'URL comme gwhn recommande.
Ajoutez simplement vos paramètres avec une valeur par défaut sur votre définition de l'état.
Votre état peut encore avoir une Url de la valeur.
et ajouter le paramètre à
$state.go()
Aucun de ces exemples sur cette page qui a travaillé pour moi. C'est ce que j'ai utilisé et ça a bien fonctionné. Certaines solutions a dit vous ne pouvez pas combiner url $à l'état.go() mais ce n'est pas vrai. L'ennui, c'est que vous devez définir les paramètres de l'url et de la liste des paramètres. Les deux doivent être présents. Testé sur Angulaire 1.4.8 et l'INTERFACE utilisateur du Routeur 0.2.15.
Dans le état ajouter votre params à la fin de l'état et de définir les paramètres:
Dans votre contrôleur votre déclaration ressemblera à ceci:
Puis de tirer les paramètres et les utiliser dans votre nouvel état du contrôleur de (n'oubliez pas de passer dans $stateParams de votre fonction de contrôleur):
Dans mon cas, j'ai essayé avec toutes les options indiquées ici, mais personne n'a été fonctionne correctement (angulaire 1.3.13, ionique 1.0.0, angular-ui-router 0.2.13). La solution était:
et dans l'état.aller:
Acclamations
J'ai passé un bon moment avec des combats Ionique /Angulaire de dollars de l'état & $stateParams;
D'utiliser $état.go() et $stateParams vous devez avoir certaines choses de configuration et d'autres paramètres ne doivent pas être présents.
Dans mon application.config (), j'ai inclus $stateProvider et définis dans plusieurs états:
La
params
clé est particulièrement important. Ainsi, de l'avis il n'y a PASurl
touches... en utilisant stateParams et les Url ne se mélangent PAS. Ils sont mutuellement exclusifs les uns des autres.Dans le $état.go() de l'appel, de la définir en tant que tel:
La
index
etanotherKey
$stateParams variables ne sera généré si ils sont d'abord inscrites dans l' $stateControllerparams
la définition de la clé.Dans le contrôleur, la somme de stateParams comme illustré:
Le passé variables devraient être disponibles!
Essayer Avec
reload: true
?Ne pouvais pas comprendre ce qui se passait pour la plus longue période de temps -- s'avère que j'ai été dupe de moi-même. Si vous êtes certains que les choses sont écrites correctement et vous aurez à utiliser le même état, essayez
reload: true
:Espère que cela vous fait gagner du temps!
Je serais face à un problème similaire. J'ai fini avec une solution de travail, après beaucoup de recherches sur google et essai et de test. Voici ma solution qui pourrait fonctionner pour vous.
J'ai deux contrôleurs - searchBoxController et stateResultController et un paramètre nommé searchQuery à être transmis à partir d'une vue d'avoir une boîte de recherche pour une vue montrant les résultats récupérés à partir d'un serveur distant. C'est comment vous le faites:
Ci-dessous est le contrôleur à partir de laquelle vous appelez l'affichage suivant à l'aide de
$state.go()
Ci-dessous est l'état qui sera appelé lorsque le
$state.go()
est exécuté:Et enfin, le contrôleur associé à l'
app.searchResults
état:Et dans mon cas d'un parent/enfant de l'état. tous les paramètres déclarés dans l'état d'enfant doit être connu par l'état parent
La solution nous est venu à avoir un état qui a pris les 2 paramètres a été en train de changer:
à
Si c'est un paramètre de requête que vous souhaitez passer comme ceci:
/toState?referer=current_user
ensuite, vous devez décrire votre état comme ceci:
source: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
Vos définir suivant router.js
Votre contrôleur besoin d'ajouter $stateParams.
Vous pouvez envoyer un objet en paramètre comme suit.
J'ai essayé de Naviguer à partir de la Page 1 à la 2, et j'ai dû passer quelques données.
Dans mon router.js, j'ai ajouté params nom et âge :
Dans Page1, onClick du bouton suivant :
Dans Page2, j'ai pu accéder à ces params :