Angular JS: внедрить сервис в app.js

Я хочу, чтобы пользователи не заходили на определенные страницы, по крайней мере, они вошли ранее. Я в настоящее время использую это:

app.run(function ($rootScope, $route, $location)
{
    var restrictedPages = 
            [   
                '/Survey/', '/Survey/Detalle', '/Survey/Accepted', '/Account/Profile',
                '/Auction/Detail', '/Survey/Accepted'
            ];

    $rootScope.$on('$locationChangeStart', function (ev, next, current)
    {
        var nextPath = $location.path();
        var nextRoute = $route.routes[nextPath];

        if(restrictedPages.indexOf(nextPath) !== -1)
        {
            $location.path('/home');
        }
    });
});

Моя проблема здесь в том, что я хочу внедрить в этот фрагмент кода мой AccountService. Как мне этого добиться? Потому что порядок загрузки следующий

  • app.js (код представлен здесь)

  • homeService.js

  • accountService.js

Я искренне верю, что это не правильный путь, но он кажется таким простым, и единственное, чего мне не хватает, - это инъекцию учетной записи.

1 ответ

Решение

Рассмотрим этот модуль, который включает accountService, который использует неявный DI:

angular.module('myApp', [])
.factory('accountService', function($rootScope) {
  // $rootScope is implicitly injected
})
.run(['$rootScope', '$route', '$location', 'accountService', function ($rootScope, $route, $location, accountService)
{
    var restrictedPages = 
            [   
                '/Survey/', '/Survey/Detalle', '/Survey/Accepted', '/Account/Profile',
                '/Auction/Detail', '/Survey/Accepted'
            ];

    $rootScope.$on('$locationChangeStart', function (ev, next, current)
    {
        var nextPath = $location.path();
        var nextRoute = $route.routes[nextPath];

        if(restrictedPages.indexOf(nextPath) !== -1 && !accountService.isLoggedIn())
        {
            $location.path('/home');
        }
    });
}]);

если вам нужна дополнительная документация: https://docs.angularjs.org/guide/di

Другие вопросы по тегам