Как отправить пустую строку в параметры маршрута в angular Js?

Привет, у меня есть форма, в которой я отправляю searched term и category id. Он отлично работает, так как я отправляю обе вещи, но если пользователь ничего не вводит, идет только «идентификатор категории», а в бэкэнде, если searched term пуст, все результаты отображаются пользователю.

Но если я отправляю пустую строку в параметры маршрута, я перенаправляюсь на страницу myindex. Это мой код app.js.

  when('/subcategory/:subcatId/:search', {
                templateUrl: 'partials/subcategory.html',
                controller: 'SubCategoriesController'
            }).

Моя форма

   <form name="searchCategoryForm">
                <div class="col-md-9 col-xs-10 col-sm-10">
                    <input class="form-control" placeholder="Find your item here...." ng-model="search" type="text" style="color:#09669c;">
                </div>
                <div class="col-md-2 col-xs-2 col-sm-2">
                    <a class="btn btn-primary" role="button" href='#/subcategory/{{cats[clicked_category].id}}/{{search}}'> Search</a>                  
                </div>
            </form>

Мой контроллер.js

$scope.search_term = $routeParams.search;
    $scope.category_id = $routeParams.subcatId;

    /* Search category form */


    $scope.search_category = function () {
        $http({
            method: 'GET',
            url: 'abc',
            params: {"name": $scope.search_term, "category_id": $scope.category_id},
            headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': $rootScope.keyword_auth_token}
        })
                .success(function (data) {
                    $scope.search_category_result = data.items;
                    console.log($scope.search_category_result);
                    })
                .error(function (data) {
                    console.log(data);
                });
    };
    /* Search category form ends here*/
    if ($scope.search_term && $scope.category_id)
    {
        $scope.search_category();
    }

person Usman I    schedule 15.12.2016    source источник


Ответы (1)


Я считаю, что вы должны пометить условия поиска как необязательные, добавив к ним вопросительный знак (?):

when('/subcategory/:subcatId/:search?', {
    templateUrl: 'partials/subcategory.html',
    controller: 'SubCategoriesController'
}).

См. этот ответ для получения дополнительной информации: Могут ли маршруты angularjs иметь необязательные значения параметров?

person Robba    schedule 15.12.2016
comment
Снимаю шляпу, сэр :) - person Usman I; 15.12.2016
comment
Да, это здесь, в документах: docs.angularjs.org/api/ngRoute/provider/ $routeProvider в разделе Methods when(path,route) для параметра path. - person Robba; 15.12.2016
comment
могу ли я задать еще один вопрос, если я отправлю пустую строку, URL-адрес станет чем-то вроде этой подкатегории/1/ я хочу удалить последний '/' - person Usman I; 15.12.2016
comment
Не уверен, что вы можете сделать это с одним маршрутом, но я уверен, что вы можете просто добавить второй маршрут без суффикса /:search, который использует тот же шаблон и контроллер. - person Robba; 15.12.2016
comment
Давайте продолжим обсуждение в чате. - person Usman I; 15.12.2016
comment
Обратите внимание, что когда вы добавляете новый маршрут с тем же шаблоном и контроллером, вы должны снова сделать параметр search обязательным, иначе будут два маршрута, соответствующие одному и тому же URL-адресу. - person Robba; 15.12.2016