2015-04-05 3 views
0

Отказ от ответственности: это постоянный «первый проект» в Angular, поэтому я все еще режу зубы.Подмодули AngularJS (и аутентификация)

Короче говоря, я использую the answer here как образец для аутентификации (выполняется через RESTful вызовы PHP-скрипту). Он работает отлично. Предостережение возникает, когда я хочу, чтобы он работал с уже существующим контроллером на угловой стороне вещей. Исходя из моего фона C++/Perl/Python, я хочу написать его один раз и включить его. Для этого я нашел the answer here. Это не совсем работает для меня. Во-первых, мой сайт был шаблонизирован с другого, и синтаксис немного отличается - я не совсем понял. Когда я пытаюсь InjectedModule.otherApp в myApp, я получаю ошибки. Код выглядит примерно так:

angular.module('otherApp', ['ngRoute','infinite-scroll']) 
.controller("loginController", 
      ['$scope', 
      '$http', 
      '$location', 
      '$window', 
      function($scope,$http,$location,$window) { 
// Do a bunch of authentication stuff 

}]) 

angular.module('myApp', ['ngRoute','infinite-scroll']) 
.controller("imageController", 
     ['$scope', 
     '$http', 
     '$location', 
     '$window', 
     function($scope,$http,$location,$window) { 

// Guts of the page generated here 

}]) 

В идеале я хотел бы, чтобы imageController зависеть от контроллера аутентификации, и, конечно, иметь контроль над тем, что отображается на основе аутентификации.

ответ

3

На контроллеры не следует зависеть. Вы должны использовать для этого услуги. Сначала вы должны создать службу проверки подлинности.

angular.module('authentication') 
.service('authService', function(){ 
    var isAuthenticated = false; 
    var user  = 'guest'; 
    var username = ''; 

    return { 
     login: function() { isAuthenticated = true; }, 
     isAuthenticated: function() { return isAuthenticated; }, 
     loggedInUser: function() { return user; } 
    } 
}); 

Теперь ваши контроллеры могут вызывать логику аутентификации от этой службы:

angular.module('authentication', ['ngRoute','infinite-scroll']) 
.controller("loginController", 
     ['$scope', '$http', '$location', '$window', 'authService', 
     function($scope,$http,$location,$window, authService) { 

    // Do a bunch of authentication stuff 
    $scope.login = function LoginUser() { 
    authService.login(); 
    } 

}]); 

// include 'authentication' module - 'images' module will depend on it 
angular.module('images', ['ngRoute','infinite-scroll', 'authentication']) 
.controller("imageController", 
    ['$scope', '$http', '$location', '$window', 'authService', 
    function($scope,$http,$location,$window, authService) { 

    // Guts of the page generated here 
    $scope.loadImages = function LoadImages() { 
    if (authService.isAuthenticated()) { 
     // do authenticated user image load logic 
    } else { 
     // do unauthenticated user image load logic 
    } 
    } 
}]); 

Ваше приложение должно также включать в себя оба модуля:

angular.module('bootstraper', [ 
    'authentication', 
    'images' 
]) 
+0

Благодарности - я сейчас на работе, но Я буду возиться с этим, когда вернусь домой. –

+0

Наконец, обойти это. Может ли быть синтаксическая ошибка в части обслуживания? Я получаю сообщение об ошибке в первом блоке кода. Не стесняйтесь посмотреть здесь: http://www.gamengai.com/authtest.html У меня не было шанса возиться намного дальше этого. –

+0

вам нужно инициализировать модуль при создании в нем первого сервиса/контроллера ... вам нужно будет изменить порядок ваших контроллеров/служб, сначала добавьте контроллер, как он определяет модуль, 'angular.module ('authentication', ['ngRoute', 'infin-scroll']). controller ', затем также определить службу на нем ... –

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