Comments 10
Не плохо, я тоже в процессе работы с AngularJS и сразу хочется поспрашивать.
Поделитесь моментами.
1. Где вы и как провряете права доступа к контроллерам? В каждом вызываете Auth.login?
И кстати зачем если у вас
вы ему user передаете?
2. Как вы делаете предзагрузку нужных данных, например той же авторизации или данных пользователя? Через resolve? run? или еще методы
Поделитесь моментами.
1. Где вы и как провряете права доступа к контроллерам? В каждом вызываете Auth.login?
И кстати зачем если у вас
function (res) {
$state.go('index.main');
},
вы ему user передаете?
success(user);
2. Как вы делаете предзагрузку нужных данных, например той же авторизации или данных пользователя? Через resolve? run? или еще методы
1. Не совсем понял вопрос про права доступа к контроллерам. На каждый http-запрос в $httpProvider у нас написан interceptor (можно прочитать здесь), который отслеживает 401 ошибку и если она возникает, то разлогинивает пользователя (принудительно чистит куки и редиректит на страницу авторизации)
Про success(user) — описка :)
2. Предзагрузка данных делается следующим образом: в самом верху
В этом контроллере, при его инициализации, одновременно запускаются функции загрузки данных и в success у каждой из них выставляется флаг в $rootScope.loaded. Например:
Благодаря тому, что интерфейс у нас основан на раздельных виджетах, мы можем показывать и скрывать разные виджеты в зависимости от стадии загрузки данных.
Про success(user) — описка :)
2. Предзагрузка данных делается следующим образом: в самом верху
index.html
находится <div ng-controller="InitCtrl"></div>
. Этот контроллер отвечает только за загрузку данных. В $rootScope
есть объект, показывающий, какие данные загружены (хранить это в $rootScope
не очень красиво, но пока что так):$rootScope.loaded = {
user: false,
clients: false,
tariffs: false,
backups: false
};
В этом контроллере, при его инициализации, одновременно запускаются функции загрузки данных и в success у каждой из них выставляется флаг в $rootScope.loaded. Например:
Backups.getBackups(function () {
$rootScope.loaded['backups'] = true;
});
Благодаря тому, что интерфейс у нас основан на раздельных виджетах, мы можем показывать и скрывать разные виджеты в зависимости от стадии загрузки данных.
Метод isLoggedIn возвращает true, если пользователь залогинен, либо false в противном случае.
Кто бы мог подумать xD
И первый вопрос, который возник, был связан с роутингами в клиентской части. Нам была необходима надёжная и простая система, которая поддерживала бы вложенные друг в друга шаблоны и позволяла однозначно сопоставлять определённому URL необходимый шаблон. После недолгих поисков мы выбрали ui-router.
Если вам нужна была надежная и простая система, то, знаете, замороченный и громоздкий ui-router — это не самый очевидный выбор. route-segment спроектирован гораздо проще, и при этом предоставляет все описанные вами функции (disclaimer: я автор).
Опишу тут свой подход. А именно:
1. Роутингом я управляю из AngularJS. Django-роутер просто парсит роутинг ангуляра.
2. Пользователя выгружаю через inline-javascript прямо внутри django-templates и принимаю в $rootScope со всеми полями (is_superuser, is_staff и т.д.)
3. Связь angular и django осуществляю через RPC (хотя это и не тру, и я сейчас от этого подхода уже ухожу в сторону REST)
1. Роутингом я управляю из AngularJS. Django-роутер просто парсит роутинг ангуляра.
2. Пользователя выгружаю через inline-javascript прямо внутри django-templates и принимаю в $rootScope со всеми полями (is_superuser, is_staff и т.д.)
3. Связь angular и django осуществляю через RPC (хотя это и не тру, и я сейчас от этого подхода уже ухожу в сторону REST)
А не рассматривали React вместо Angular?
Самым полезным в этой статье оказалась картинка для привлечения внимания.
в Auth.login используйте promise а в контроллере уже делайте success
Sign up to leave a comment.
Как мы делали каркас приложения на AngularJS и Django