web-dev-qa-db-fra.com

Comment extraire les paramètres de requête avec ui-router pour AngularJS?

Comment extraire les paramètres de requête à l'aide de ui-router pour AngularJS? 

Dans le service $location propre à AngularJS, j'ai: 

($ location.search ()). uid

extraire le paramètre uid d'une URL. Quel est le code correspondant pour ui-router?

58

Sauf si vous vous liez aux paramètres de la requête (voir la documentation), vous n'y accédez pas directement via $state ou $stateParams. Utilisez le service $location.

EDIT: Per la documentation , si vous souhaitez capturer les paramètres de requête dans $stateParams, vous pouvez ajouter un ? à votre url et nommer chaque paramètre de requête, séparé par &, i.e. url: "/foo?bar&baz".

51
Nate Abele

Voir la section relative aux paramètres de requête de la Documentation de routage d'URL .

Vous pouvez également spécifier des paramètres en tant que paramètres de requête, après un '?':

url: "/contacts?myParam"
// will match to url of "/contacts?myParam=value"

Pour cet exemple, si l'URL est /contacts?myParam=value, la valeur de $state.params sera:

{ myParam: 'value' }
95
thisgeek

ui-router ne fait pas la différence entre différents types de paramètres dans une URL, comme le fait le service $ location.

Dans vos contrôleurs, vous pouvez utiliser le service $ stateParams pour accéder à tous les types de paramètres de votre URL.

vous trouverez ci-dessous un exemple tiré du wiki ui-router:

// Then you navigated your browser to:
'/users/123/details/default/0?from=there&to=here'

// Your $stateParams object would be
{ id:'123', type:'default', repeat:'0', from:'there', to:'here' }

Donc, dans votre cas, pour trouver le paramètre uid, utilisez simplement:

$scope.uid = $stateParams.uid
9
SStanley

Vous devez également définir les paramètres de requête dans $ stateProvider, par exemple.

state('new-qs', {
  url: '/new?portfolioId&param1&param2',
  templateUrl: 'new.html',
  controller: function($scope, $stateParams) {
     $scope.portfolioId = $stateParams.portfolioId;
     $scope.param1 = $stateParams.param1;
     $scope.param2 = $stateParams.param2;
  }
})

comme expliqué par benfoster.io

6
fredtma

Vous pouvez l'obtenir à partir de $ stateParams, mais vous devez également déclarer la variable de requête dans la route.

déclarer en route comme - 

url: '/path?name'

pour obtenir le nom dans le contrôleur injecter $ stateParams, et utiliser comme - 

$stateParams.name

2
Partha Roy

Pour les versions récentes de AngularJS et ui-router, je pense que vous pouvez simplement utiliser $state pour accéder aux paramètres:

$state.params[<PARAMETER_NAME>]

où dans app.js vous avez défini l'état comme suit:

.state('app.name', {
    url: '/:some_param_id',
    templateUrl: '/templates/home.html'
})
0
JohnAndrews