Pasando el parámetro dentro de $ location.path en Angular

88

Solo intento usarlo $location.path()en mi controlador, pero también paso una variable personalizada como parámetro. Supongo que se vería así:

$scope.parameter = 'Foo';

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

Pero eso no funciona. ¿Alguien sabe cómo se supone que se debe hacer esto en Angular?

AzzyDude
fuente

Respuestas:

183

para agregar parámetros debe usar el $location.search()método así:

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

$locationlos métodos son encadenables .

este producto:

/myURL/?param=value
mohsen dorparasti
fuente
revisar la ortografía, mayúsculas / minúsculas y sus enlaces
mohsen dorparasti
¿Hay alguna forma de convertir esto para que la URL se vea como / myUrl / value en lugar de / myURL /? Param = value?
AzzyDude
1
puede usar .Path ('/ myURL /' + valor). pero entonces ya no se llama parámetro.
mohsen dorparasti
2
Tuve que eliminar el final / para que esto funcione. Este código es la copia de trabajo $location.path('/myURL').search({param: 'value'});
bodagetta
38

La otra forma de agregar un parámetro a la URL es:

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

y puede definir la ruta a myPage.html:

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

A continuación, se puede acceder al parámetro en newController de la siguiente manera:

var param1= $routeParams.param1;
krzysiek.ste
fuente
1
¿Esa respuesta agrega un parámetro de consulta o un atributo de ruta?
Phil
13

Por ejemplo, si necesita ingresar en su URL uno o más parámetros:

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

en tu url representará

/path?foo=valueFoo&baz=valueBaz

Para obtener parámetros en otro controlador:

var urlParams = $location.search();


urlParams.foo will return valueFoo

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

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

  };

Esto da como resultado la URL

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

De esta manera, no tiene que escribir manualmente los parámetros entre corchetes

FilipeG
fuente
Supongo que tiene $ stateParams inyectado en su controlador para que esto funcione.
FilipeG