2016-02-05 4 views
0

Я создаю приложение с использованием ионного и углового огня, и я не понимал логики поддержания сеансов с использованием $ onAuth. Я знаю, как работает функция, но я не знаю точно, где ее использовать.

Нужно ли мне вводить это значение $ onAuth в каждом контроллере и верить, если authData имеет значение null или нет (чтобы затем использовать $ unauth и перенаправлять пользователя должным образом) ИЛИ существует способ, чтобы эта функция ($ onAuth) была централизована в другом файле и разрешала ir listing и только тогда что-то делать, если authData имеет значение null?

Не стесняйтесь спросить, не вопрос ли это непонятно!

Заранее благодарим всех, кто помогает! :)

ответ

1

Есть много возможных способов, которые вы можете предпринять для своей цели. Хуже всего было бы поступить так, как вы описали, и иметь его в каждом контроллере, потому что вы должны сохранить свой код DRY. Ваша цель состоит в том, чтобы написать метод только для $onAuth один раз.

Один простой подход состоит в том, чтобы иметь либо MainController, который инстанцируется на самом верху вашего дома (например, на самом внешнем html-элементе, например теге тела). Затем вы можете использовать дочерние контроллеры для доступа к данным из родительского контроллера, как описано, например, here. Вы должны ввести услугу $onAuth в главный контроллер и позволить ей выполнять свою логику, и вы можете получить доступ к главному контроллеру $scope с вашим authData со всех своих дочерних контроллеров.

Более многоразовой частью будет создание службы, доступ к которой вы можете получить со всех ваших контроллеров. Найдите отличный учебник здесь.

Самый простой способ - иметь $onAuth в run block вашего модуля и сохранить его в вашем $rootScope, к которому также можно получить доступ позже со всех контроллеров. Here - пример аутентификации. Вы бы напишите

angular.module('your-module').run(function($rootScope, Auth) { 
    $rootScope.auth = Auth; 
    $rootScope.auth.$onAuth(function(authData) { 
    $rootScope.authData = authData; 
    //do anything you want here, e.g. redirect 
    }); 
} 
+0

«Более многоразовая часть должна заключаться в том, чтобы написать сервис, доступ к которому вы можете получить со всех ваших контроллеров. Найдите отличный учебник здесь». Я думаю, вы забыли ссылку в этом предложении. Кроме того, ваш ответ велик, довольно много вариантов! огромное спасибо!! –

Смежные вопросы