webentwicklung-frage-antwort-db.com.de

Wie extrahiere ich Abfrageparameter mit ui-router für AngularJS

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?

58

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".

51
Nate Abele

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' }
95
thisgeek

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
9
SStanley

Sie müssen auch die Abfrageparameter im $ stateProvider definieren, z.

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;
  }
})

wie erklären von benfoster.io

6
fredtma

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

2
Partha Roy

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'
})
0
JohnAndrews