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