Я конвертирую свое приложение из ngRoute в uiRouter. Я читал и смотрел много учебников, но мне все еще не хватает опыта, чтобы принять решение о лучших практиках.
Прежде всего, основное изменение, которое я сделал, - разбить декларацию состояния на каждый модуль/контроллер. Это кажется мне более естественным и чистым, но представляет собой некоторую сложность, когда вы хотите применить глобальное правило ко многим государствам. Например, половина моих маршрутов требует аутентификации, а другая половина - нет. С ngRoute у меня был атрибут данных, обозначающий уровень авторизации, необходимый для каждого маршрута. С uiRouter я понимаю, что есть такой способ сделать это, и есть способ наследования штата. Таким образом, маршрут может быть public.myRoute, где public - это абстрактный маршрут, объявленный на уровне приложения. Это создает проблему, хотя модуль не может работать автономно, если кто-то не определяет публичное состояние. В отличие от этого, если я добавлю атрибут метаданных в объект данных, например "auth_level: user", это не повлияет на модуль, если с ним никто не справится. Но это кажется более "волшебным" и менее ремонтопригодным.
То же самое происходит с навигационной панелью. У половины моих просмотров есть панель навигации, а другая половина - нет. До сих пор я использовал атрибут isNavbarVisible boolean, но я понимаю, что это должно быть частью состояния? Возможно, второй ui-view в шаблоне layout.html вместо использования ng-include с ng-if, как я это делал до сих пор?
Наконец, мне интересно, как лучше всего применять обещание в каждом маршруте, который нужно решить. Например, независимо от того, где находится точка входа приложения, права пользователя должны быть разрешены перед загрузкой представления. В ngRoute я перебирал все маршруты в своем определении и добавлял это обещание.
Есть ли хорошее руководство для лучших практик при переходе с ngRoute на uiRouter, потому что предпочтительнее других рекомендаций, таких как "заменить ng-include" именем ui-view или этим государственным наследованием, я не нашел никаких конкретные реализации, демонстрирующие это.