@petter
веб разработчик

Как сделать роутинг для переменной величины вложенности?

Привет! Есть каталог товаров с такой структурой:
Каталог
├── Розы
│   ├── Красные
│   ├── Белые
│   └── Розовые
├── Ромашки
│   ├── Лесные
│   │   ├── Белые
│   │   └── Желтые
│   ├── Полевые
│   │   ├── Белые
│   │   └── Желтые

Я хочу чтобы урл для каждой категории или товара соответствовал ее расположению в каталоге.
Проблема в том, что и категория и товар могут быть на одном уровне вложенности, например
/каталог/розы/красные -> это товар
/каталог/ромашки/полевые -> это категория

Если возможность как-то обработать такую ситуацию в роутере? Единственный вариант который пока пришел на ум - прописать все в ручную.
  • Вопрос задан
  • 252 просмотра
Пригласить эксперта
Ответы на вопрос 2
@AnneSmith
самая ленивая
если данные не имеют дополнительного свойства категории, подкатегории или товара, то у вас потом будут проблемы с выбором данных
тут или соблюдать структуру, и тогда розам надо добавить подкатегорию "чайные", например, даже если такая подкатегория одна, либо каждый узел должен иметь набор свойств, например, тип
Ответ написан
Комментировать
Ptolemy_master
@Ptolemy_master
Насколько я знаю, ангуляр не поддерживает wildcard в маршрутах.
Во-вторых, в вашем случае никто не сможет распознать, когда в маршруте категория, а когда продукт.
Можно решить это вставкой дополнительных "указаний" и для каждого возможного варианта, видимо, придется делать свой маршрут. В итоге получится что-то вроде такого:

app.config(['$routeProvider', function($routeProvider) {
        $routeProvider
                 .when('/catalogue/category/:category/:product', {templateUrl: 'xxx.html', controller: 'xxxCtrl'})
                  .when('/catalogue/category/:category/subcategory/:subcategory/:product', {templateUrl: 'xxx.html', controller: 'xxxCtrl'})
                  .when('/catalogue/:category/:category', {templateUrl: 'xxx.html', controller: 'xxxCtrl'});  
 }]);

и так далее.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы