$ routeProvider does not match query strings, but only routes. In addition, you set the full url to $ location.path (), and $ location.path () only accepts the path fragment. To set the entire URL, including the query string, you need to use $location.url() .
Here are a few options:
1. Use beautiful URLs instead
$routeProvider.when("/joboffers/:location/:keywords", { controller: "jobOffersController", templateUrl: "/App/Views/JobOffer/All.html" }); $scope.searchJobOffer = function () { var vm = $scope.jobOfferSearchViewModel; var path = "/joboffers/" + (vm.location || "") + "/" + ( vm.keywords || ""); $location.path(path); }; app.controller('jobOffersController', ['$scope', '$routeParams', 'jobOfferService', function ($scope, $routeParams, jobOfferService) { $scope.jobOffers = []; function init() { var keywords = $routeParams.keywords; var location = $routeParams.location; } init(); }]);
2. Only a match on a job offers a path and pulls parameters from $ location.search ()
(note the use of $location.url() instead of $location.path() )
$routeProvider.when("/joboffers", { controller: "jobOffersController", templateUrl: "/App/Views/JobOffer/All.html" }); $scope.searchJobOffer = function () { var vm = $scope.jobOfferSearchViewModel; var url = "/joboffers?keywords=" +( vm.keywords || "") + "&location=" + (vm.location || ""); $location.url(url); }; app.controller('jobOffersController', ['$scope', '$location', 'jobOfferService', function ($scope, $location, jobOfferService) { $scope.jobOffers = []; function init() { var search = $location.search(); var keywords = search.keywords; var location = search.location; } init(); }]);
3. If you need to match the route and the query string, try something more reliable, for example angular -ui-router
$stateProvider.state("JobOffers", { url: '/joboffers?keywords&location', controller: "jobOffersController", templateUrl: "/App/Views/JobOffer/All.html" }); $scope.searchJobOffer = function () { var vm = $scope.jobOfferSearchViewModel; var url = "/joboffers?keywords=" +( vm.keywords || "") + "&location=" + (vm.location || ""); $location.url(url); }; app.controller('jobOffersController', ['$scope', '$stateParams', 'jobOfferService', function ($scope, $stateParams, jobOfferService) { $scope.jobOffers = []; function init() { var keywords = $stateParams.keywords; var location = $stateParams.location; } init(); }]);
theJoeBiz
source share