Passando parâmetro dentro de $ location.path em Angular

88

Estou apenas tentando usar $location.path()no meu controlador, mas também passando uma variável personalizada como parâmetro. Então, seria algo assim, eu acho:

$scope.parameter = 'Foo';

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

Mas isso não funciona. Alguém sabe como isso deve ser feito no Angular?

AzzyDude
fonte

Respostas:

183

para adicionar parâmetros, você deve usar o $location.search()método para:

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

$locationos métodos são encadeados .

este produto:

/myURL/?param=value
Mohsen Dorparasti
fonte
verifique a ortografia, maiúsculas / minúsculas e suas ligações
mohsen dorparasti
Existe alguma maneira de converter isso para que o url se pareça com / myUrl / value em vez de / myURL /? Param = value?
AzzyDude
1
você pode usar .Path ('/ myURL /' + value). mas então não é mais chamado de parâmetro.
mohsen dorparasti
2
Eu tive que remover o trailing / para fazer isso funcionar. Este código é a cópia de trabalho $location.path('/myURL').search({param: 'value'});
bodagetta
38

A outra maneira de adicionar parâmetro ao url é:

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

e você pode definir a rota para myPage.html:

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

O parâmetro pode então ser acessado em newController da seguinte maneira:

var param1= $routeParams.param1;
krzysiek.ste
fonte
1
Essa resposta está adicionando um parâmetro de consulta ou um atributo de rota?
Phil
13

Por exemplo, se você precisar inserir em seu URL um ou mais parâmetros:

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

em seu url representará

/path?foo=valueFoo&baz=valueBaz

Para obter parâmetros em outro controlador:

var urlParams = $location.search();


urlParams.foo will return valueFoo

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

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

  };

Isso resulta no url

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

Desta forma, você não precisa digitar manualmente os parâmetros entre colchetes

FilipeG
fonte
Estou assumindo que você tem $ stateParams injetados em seu controlador para que isso funcione.
FilipeG