Passer un paramètre dans $ location.path dans Angular

88

J'essaye juste d'utiliser $location.path() dans mon contrôleur mais aussi en passant une variable personnalisée en tant que paramètre. Donc, ça ressemblerait à quelque chose comme ça, je suppose:

$scope.parameter = 'Foo';

$location.path('/myURL/' + $scope.parameter);

Mais ça ne marche pas. Quelqu'un sait-il comment cela est censé être fait dans Angular?

AzzyDude
la source

Réponses:

183

pour ajouter des paramètres, vous devez utiliser la $location.search()méthode ainsi:

$location.path('/myURL/').search({param: 'value'});

$locationles méthodes sont chaînables .

ce produit:

/myURL/?param=value
mohsen dorparasti
la source
vérifier l'orthographe, les majuscules / minuscules et leurs reliures
mohsen dorparasti
Existe-t-il un moyen de convertir cela pour que l'URL ressemble à / myUrl / value au lieu de / myURL /? Param = value?
AzzyDude
1
vous pouvez utiliser .Path ('/ myURL /' + value). mais alors il n'est plus appelé paramètre.
mohsen dorparasti
2
J'ai dû supprimer la fin / pour que cela fonctionne. Ce code est la copie de travail $location.path('/myURL').search({param: 'value'});
bodagetta
38

L'autre façon d'ajouter un paramètre à l'URL est:

 $location.path('/myURL/'+ param1);

et vous pouvez définir la route vers myPage.html:

config(['$routeProvider', function ($routeProvider) {
        $routeProvider.when('/myURL/:param1', {
            templateUrl: 'path/myPage.html',
            controller: newController
            });
    }]);

Le paramètre est alors accessible dans newController comme suit:

var param1= $routeParams.param1;
krzysiek.ste
la source
1
Cette réponse ajoute-t-elle un paramètre de requête ou un attribut d'itinéraire?
Phil
13

Par exemple si vous devez mettre dans votre URL un ou plusieurs paramètres:

$location.path('/path').search({foo: 'valueFoo', baz:'valueBaz'})

dans votre URL représentera

/path?foo=valueFoo&baz=valueBaz

Pour obtenir des paramètres dans un autre contrôleur:

var urlParams = $location.search();


urlParams.foo will return valueFoo

urlParams.baz will return valueBaz
Lucas Pires
la source
2
  function pathToSomewhere() {
    $stateParams.name= vm.name; //john
    $stateParams.phone= vm.phone; //1234
    $stateParams.dateOfBirth= getDoB(); //10-10-1990

    $location.path("/somewhere/").search($stateParams);

  };

Cela se traduit par l'URL

http://middle-of-nowhere.com/#/somewhere/?name=john&phone=1234&dateOfBirth=10-10-1990

De cette façon, vous n'avez pas à taper manuellement les paramètres entre crochets

FilipeG
la source
Je suppose que vous avez $ stateParams injecté sur votre contrôleur pour que cela fonctionne.
FilipeG