Si vous souhaitez transmettre un état non URL, vous ne devez pas l'utiliser url
lors de la configuration de votre state
. J'ai trouvé la réponse sur un PR et j'ai fait quelques singes pour mieux comprendre.
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
Ensuite, vous pouvez y accéder comme suit:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
Ou:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
Et en HTML donc:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
Ce cas d'utilisation est complètement découvert dans la documentation, mais je pense que c'est un moyen puissant de transition d'état sans utiliser d'URL.
params
tableau.{referer: true, param2: true, etc: true}
La solution de Nathan Matthews n'a pas fonctionné pour moi, mais elle est tout à fait correcte mais il n'y a pas grand intérêt à trouver une solution de contournement:
Le point clé est: Le type de paramètres définis et toParamas de $ state.go doit être le même tableau ou objet des deux côtés de la transition d'état.
Par exemple, lorsque vous définissez un paramètre dans un état comme suit, vous voulez dire que params est un tableau en raison de l'utilisation de "[]":
Vous devez donc également passer toParams en tant que tableau comme celui-ci:
Et vous pouvez y accéder via $ stateParams en tant que tableau comme celui-ci:
La meilleure solution consiste à utiliser un objet au lieu d'un tableau des deux côtés :
J'ai remplacé [] par {} dans la définition des paramètres. Pour passer toParams à $ state.go, vous devez également utiliser object au lieu de array:
alors vous pouvez y accéder facilement via $ stateParams:
la source
params: {'index', 'anotherKey'},
parparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
sinon ce n'est pas un objet javascript valideTout ce que j'avais à faire était d'ajouter un paramètre à la définition de l'état de l'url comme ceci
Doh!
la source
/toState/:referer
syntaxe est d'utiliser à la$location.path()
place de$state.go()
.Je 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 réalise juste qu'il n'est pas nécessaire de passer le paramètre dans l'URL comme le recommande gwhn.
Ajoutez simplement vos paramètres avec une valeur par défaut sur votre définition d'état. Votre état peut toujours avoir une valeur URL.
et ajoutez le paramètre à
$state.go()
la source
Aucun de ces exemples sur cette page n'a fonctionné pour moi. C'est ce que j'ai utilisé et cela a bien fonctionné. Certaines solutions disent que vous ne pouvez pas combiner url avec $ state.go () mais ce n'est pas vrai. La chose gênante est que vous devez définir les paramètres de l'url et également lister les paramètres. Les deux doivent être présents. Testé sur Angular 1.4.8 et UI Router 0.2.15.
Dans l' état, ajoutez vos paramètres à la fin de l'état et définissez les paramètres:
Dans votre contrôleur, votre instruction go ressemblera à ceci:
Ensuite, pour extraire les paramètres et les utiliser dans le contrôleur de votre nouvel état (n'oubliez pas de passer $ stateParams à votre fonction de contrôleur):
la source
Dans mon cas, j'ai essayé avec toutes les options données ici, mais personne ne fonctionnait correctement (angular 1.3.13, ionic 1.0.0, angular-ui-router 0.2.13). La solution était:
et dans le state.go:
À votre santé
la source
J'ai passé beaucoup de temps à me battre avec $ state & $ stateParams;
Pour utiliser $ state.go () et $ stateParams, vous devez avoir configuré certaines choses et d'autres paramètres ne doivent pas être présents.
Dans mon app.config (), j'ai inclus $ stateProvider et défini en son sein plusieurs états:
La
params
clé est particulièrement importante. De plus, notez qu'il n'y a AUCUNEurl
clé présente ... en utilisant stateParams et les URL ne se mélangent PAS. Ils s'excluent mutuellement.Dans l'appel $ state.go (), définissez-le comme tel:
Les variables
index
etanotherKey
$ stateParams seront UNIQUEMENT remplies si elles sont d'abord répertoriées dans laparams
clé de définition $ stateController .Dans le contrôleur, incluez $ stateParams comme illustré:
Les variables passées devraient être disponibles!
la source
Essayez avec
reload: true
?Je n'arrivais pas à comprendre ce qui se passait depuis le plus longtemps - je me trompais. Si vous êtes certain que les choses sont écrites correctement et que vous allez utiliser le même état, essayez
reload: true
:J'espère que cela vous fera gagner du temps!
la source
J'étais confronté à un problème similaire. Je me suis retrouvé avec une solution fonctionnelle après beaucoup de recherches sur Google et d'essais et de tests. Voici ma solution qui fonctionnerait pour vous.
J'ai deux contrôleurs - searchBoxController et stateResultController et un paramètre nommé searchQuery à passer d'une vue ayant une zone de recherche à une vue montrant les résultats extraits d'un serveur distant. Voici comment procéder:
Vous trouverez ci-dessous le contrôleur à partir duquel vous appelez la vue suivante en utilisant
$state.go()
Voici l'état qui serait appelé lorsque le
$state.go()
est exécuté:Et enfin, le contrôleur associé à l'
app.searchResults
état:la source
Et dans mon cas, un état parent / enfant. tous les paramètres déclarés dans l'état enfant doivent être connus par l'état parent
la source
La solution que nous avons trouvée pour avoir un état qui prenait 2 paramètres était en train de changer:
à
la source
Votre définition suivante dans router.js
Votre contrôleur doit ajouter $ stateParams.
Vous pouvez envoyer un objet par paramètre comme suit.
la source
J'essayais de naviguer de la page 1 à la page 2 et je devais également transmettre certaines données.
Dans mon router.js , j'ai ajouté le nom et l' âge des paramètres :
Dans Page1 , surCliquez sur le bouton suivant:
Dans Page2 , je pourrais accéder à ces paramètres:
la source
S'il s'agit d'un paramètre de requête que vous souhaitez transmettre comme ceci:
/toState?referer=current_user
alors vous devez décrire votre état comme ceci:
source: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
la source