Pull to refresh

Comments 10

Не плохо, я тоже в процессе работы с AngularJS и сразу хочется поспрашивать.

Поделитесь моментами.

1. Где вы и как провряете права доступа к контроллерам? В каждом вызываете Auth.login?
И кстати зачем если у вас
function (res) { $state.go('index.main'); },
вы ему user передаете?
success(user);

2. Как вы делаете предзагрузку нужных данных, например той же авторизации или данных пользователя? Через resolve? run? или еще методы
1. Не совсем понял вопрос про права доступа к контроллерам. На каждый http-запрос в $httpProvider у нас написан interceptor (можно прочитать здесь), который отслеживает 401 ошибку и если она возникает, то разлогинивает пользователя (принудительно чистит куки и редиректит на страницу авторизации)

Про 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;
});


Благодаря тому, что интерфейс у нас основан на раздельных виджетах, мы можем показывать и скрывать разные виджеты в зависимости от стадии загрузки данных.
Идея с interceptor приятная, да и идея с подгрузчиком и показамо виджетов на основании флагов тоже интересная, спасибо.
Метод 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)
А не рассматривали React вместо Angular?
Нет, не рассматривали, потому что с Angular уже был опыт работы и для ускорения процесса решили остановиться на нём.
в Auth.login используйте promise а в контроллере уже делайте success
Sign up to leave a comment.