Angular UI-Router passer des données entre les états avec la fonction go ne fonctionne pas
J'ai juste commencé à apprendre le angularjs et je suis en utilisant angular-ui-router. Je suis en train d'envoyer des données à partir d'un état à un autre à l'aide de $state.go
mais je n'ai pas de succès. Voici ce que j'ai à ce jour:
Je n'ai pas inclus le code html intentionnellement parce que je suppose qu'il n'est pas nécessaire si elle est nécessaire, dites-le moi et je vais l'ajouter.
J'ai configuré mes états comme ci-dessous:
$stateProvider
.state('public', {
abstract: true,
templateUrl: 'App/scripts/main/views/PublicContentParent.html'
})
.state('public.login', {
url: '/login',
templateUrl: 'App/scripts/login/views/login.html',
controller: 'loginCtrl'
})
$stateProvider
.state('private', {
abstract: true,
templateUrl: 'App/scripts/main/views/PrivateContentParent.html'
})
.state('private.visits', {
url: '/visits',
views: {
'main': {
controller: 'visitsListCtrl',
templateUrl: 'App/scripts/visits/views/VisitsList.html'
}
}
});
Quand mon LoginController
est appelé il va exécuter le code ci-dessous:
loginModule.controller('loginCtrl', ['$state', function ($scope, $state) {
$state.go('private.visits', { name : "Object"});
}]);
Lorsque le private.visits
page est active, je suis en train d'imprimer la $stateParams
:
visitsModule.controller('visitsListCtrl', ['$stateParams',
function ($stateParams) {
console.log($stateParams);
}]);
Que les choses de l'état $stateParams est un objet vide. Je m'attendais à contenir l'objet, je suis passé dans loginCtrl.
MODIFIER
Il semble que si private.visits
url a ce format d'url '/visits/:name'
et j'ai aussi l'ajout de la propriété params: ["name"] j'ai accès à l'objet-je envoyer de l' public.login
état.
L'effet secondaire est que les paramètres sont ajoutés à l'url, ce qui est logique.
J'ai essayé de faire la même chose avec un enfant d'état sans url, et dans ce cas, il semble que je n'ai pas accès à la params j'ai passé de public.login
.
Comment puis-je envoyer des données à l'enfant des etats-unis?
source d'informationauteur aleczandru
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez à faire est de définir la
name
param dans leprivate.visits
état comme:Et puis dans le contrôleur d'accès pour le nom:
Espère que cela vous aidera!
Quand vous dites:
$state.go('private.visits', { name : "Object"});
Vous n'êtes pas la transmission des données à la
private.visits
de l'état, mais plutôt que vous êtes en définissant un paramètre à laprivate.visits
de l'état, qui ne prend même pas en charge les paramètres que vous n'avez pas défini les paramètres dans l'état de config. Si vous souhaitez partager des données entre les états de l'utilisation d'un service, ou si vos états ont une relation parent-enfant puis de l'état d'enfant aura accès à la société mère des états des données. Voyant que la façon dont vous ne souhaitez pas que les données à semer dans votre Url, je voudrais utiliser un service (getters/setters) pour atteindre cet objectif.