Wie extrahiere ich Abfrageparameter mit ui-router für AngularJS?
In AngularJS 'eigenem $location
-Dienst habe ich Folgendes ausgeführt:
($ location.search ()). uid
um den Parameter uid aus einer URL zu extrahieren. Was ist der entsprechende Code für den UI-Router?
Wenn Sie nicht an die Abfrageparameter gebunden sind (siehe Dokumentation), können Sie nicht direkt über $state
oder $stateParams
auf sie zugreifen. Verwenden Sie den $location
-Dienst.
EDIT: Per the docs Wenn Sie Abfrageparameter in $stateParams
erfassen möchten, können Sie einen ?
an Ihre url
anhängen und jedem Abfrageparameter einen Namen geben, der durch &
getrennt ist, d. H. url: "/foo?bar&baz"
.
Siehe den Abschnitt zu den Abfrageparametern in der URL-Routing-Dokumentation .
Sie können auch Parameter als Abfrageparameter angeben, die einem '?' Folgen:
url: "/contacts?myParam" // will match to url of "/contacts?myParam=value"
Wenn in diesem Beispiel die URL /contacts?myParam=value
ist, lautet der Wert von $state.params
:
{ myParam: 'value' }
der ui-router unterscheidet nicht wie beim $ location-Dienst verschiedene Typen von Parametern in einer URL.
In Ihren Controllern können Sie den $ stateParams-Dienst verwenden, um Zugriff auf alle verschiedenen Arten von Parametern in Ihrer URL zu erhalten.
unten ist ein Beispiel aus dem UI-Router-Wiki:
// 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' }
Verwenden Sie also in Ihrem Fall den uid param einfach:
$scope.uid = $stateParams.uid
Sie müssen auch die Abfrageparameter im $ stateProvider definieren, z.
state('new-qs', {
url: '/new?portfolioId¶m1¶m2',
templateUrl: 'new.html',
controller: function($scope, $stateParams) {
$scope.portfolioId = $stateParams.portfolioId;
$scope.param1 = $stateParams.param1;
$scope.param2 = $stateParams.param2;
}
})
wie erklären von benfoster.io
Sie können es von $ stateParams erhalten, aber in diesem Fall müssen Sie auch die Abfragevariable in der Route deklarieren.
erklären in Route wie -
url: '/path?name'
um einen Namen in den Controller zu bekommen, geben Sie $ stateParams, ein und verwenden Sie wie -
$stateParams.name
Für aktuelle Versionen von AngularJS und UI-Router denke ich, dass Sie einfach $state
verwenden können, um auf die Parameter zuzugreifen:
$state.params[<PARAMETER_NAME>]
wo in app.js haben Sie den Zustand wie folgt definiert:
.state('app.name', {
url: '/:some_param_id',
templateUrl: '/templates/home.html'
})