Разрешить переменную для ng-включенного представления

0

Это мой 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

Проблемы:

  1. ng-controller нельзя использовать с разрешением, поскольку он создает ошибку AngularJs "неизвестного поставщика". Поэтому ng-include создает проблемы для маршрута '/'.
  2. Я не могу/не знаю, как указать решение для навигационной панели, поскольку он не имеет маршрута, но включен в каждое представление в index.html. Навигатор должен показывать имя зарегистрированного пользователя.

EDIT1: Я попробовал уродливое решение, вернув myPromise.$$state.value в homeController и удалив resolve {...}. Однако мне кажется, что я не должен использовать обещания $ q, подобные этому. Любые другие предложения?

EDIT2: Я имею в виду, что loggedUser неизвестен из-за ng-controller = "". Вот объяснение: AngularJS, разрешающий и неизвестный провайдер.

Теги:
resolve
ng-include

2 ответа

0

Я думаю, причина, по которой вы получаете сообщение об ошибке "неизвестный поставщик", заключается в том, что вам нужно ввести службу userService в функцию разрешения:

app.config(['$routeProvider',
function ($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: 'partials/home.html',
        controller: 'homeController',
        resolve: {
            loggedUser: function(userService) {
                return userService.getLoggedUser();
            }
        }
}]);
  • 0
    Возможно, мне было немного неясно, я имел в виду, что поставщик loggedUser неизвестен. Я обновил свой ответ, чтобы вы могли понять, что я имею в виду. Это результат ng-controller = "".
0

Вы можете отделить навигационную панель от остальной части вашего приложения. Используйте что-то вроде

<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.

  • 0
    Ну, это то, что у меня есть сейчас. Проблема заключается в том, что я хочу использовать свойство resolve routeProvider, поскольку другие контроллеры используют переменную loggedUser, и поэтому она должна быть обещанием $ q, но я не могу использовать ng-controller вместе с resolv из-за того, что я написал в EDIT2 ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню