Это мой app.js:
app.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'partials/home.html',
controller: 'homeController',
resolve: {
loggedUser: getLoggedUser
}
}]);
Функция getLoggedUser() возвращает обещание, которое разрешено в userService
когда он нашел зарегистрированного пользователя. В моем index.html я включаю панель навигации:
<ng-include src="'partials/navbar.html'" ng-controller="homeController"></ng-include> // Navbar
<div ng-view></div> // Angular views
Проблемы:
EDIT1: Я попробовал уродливое решение, вернув myPromise.$$state.value
в homeController
и удалив resolve {...}
. Однако мне кажется, что я не должен использовать обещания $ q, подобные этому. Любые другие предложения?
EDIT2: Я имею в виду, что loggedUser неизвестен из-за ng-controller = "". Вот объяснение: AngularJS, разрешающий и неизвестный провайдер.
Я думаю, причина, по которой вы получаете сообщение об ошибке "неизвестный поставщик", заключается в том, что вам нужно ввести службу userService
в функцию разрешения:
app.config(['$routeProvider',
function ($routeProvider) {
$routeProvider.when('/', {
templateUrl: 'partials/home.html',
controller: 'homeController',
resolve: {
loggedUser: function(userService) {
return userService.getLoggedUser();
}
}
}]);
Вы можете отделить навигационную панель от остальной части вашего приложения. Используйте что-то вроде
<body>
<div ng-controller = "navbarController as nav">
<div ng-show=" userIsLoggedIn"> <!-- show navbar only if true -->
<!-- navbar markup-->
</div>
</div>
<div ng-view> <!-- display other templates here --> </div>
</body>
Затем вы можете использовать service
в которой мы сохраняем статус входа и учетные данные пользователя. Поскольку доступ к приложениям можно получить достаточно широко, вы можете получить доступ к своим данным (например, имя пользователя) в вашем navbarController
.