2015-11-08 7 views
0

Я работаю над веб-приложением с угловым. Я создал заголовок, который включен в index.html, поэтому он привязан к каждой странице, а содержимое страницы вводится через ui-view. Мой вопрос: если я хочу только показать этот заголовок после, пользователь прошел регистрацию и страницы входа, что мне делать?Доступ к переменной от маршрутизатора в Угловом

Я добавил переменную к моему маршрутизатору, как показано ниже, но я не уверен, как получить доступ к переменной маршрутизатора из index.html, поскольку она не привязана к контроллеру (поскольку это фиксированный контент на всех страницах). Я намеревался просто выбросить ng-hide = "hideHeader" в index.html.

app.config(function($stateProvider, $urlRouterProvider) { 

$urlRouterProvider.otherwise('/login'); 

$stateProvider 
    .state('login', { 
     url: '/login', 
     templateUrl: 'app/views/login/login.html', 
     controller: 'loginController', 
     controllerAs: 'vm', 
     hideHeader: true 
    }) 

    .state('signup', { 
     url: '/signup', 
     templateUrl: 'app/views/signup/signup.html', 
     controller: 'signupController', 
     controllerAs: 'vm', 
     hideHeader: true 
    }) 

    .state('landing', { 
     url: '/landing', 
     templateUrl: 'app/views/landing/landing.html', 
     controller: 'landingController', 
     controllerAs: 'vm', 
     hideHeader: false 
    }) 

    .state('account-management', { 
     url: '/account-management', 
     templateUrl: 'app/views/account-management/account-management.html', 
     controller: 'accountManagementController', 
     controllerAs: 'vm' 
     hideHeader: false 
    }); 
}); 

Как я могу получить доступ к этому значению hideHeader из index.html? Есть ли способ установить глобальную переменную области видимости и получить значение оттуда?

+0

Просто примечание, ng-if меньше веса, чем ng-hide/ng-show, поэтому я буду использовать его, когда это возможно. Кроме того, при добавлении данных в состояние вы должны использовать параметр данных, как это видно из документации [здесь] (https://github.com/angular-ui/ui-router/wiki). – nggonzalez

ответ

3

Вот другой подход: создайте службу специально для аутентификации (входа/выхода) и состояния аутентификации. Затем просто вызовите эту службу в своем заголовке. Учитывая, что заголовок зависит от вашей аутентификации, тогда имеет смысл отвлечь это. Контроллеры входа/регистрации будут взаимодействовать с этой службой.

Теперь ваши маршруты также могут вызывать эту службу, чтобы узнать, разрешать ли пользователям просматривать их на основе состояния входа.

+1

Я согласен, что это наиболее многоразовое решение, если есть много контроллеров, которые будут полагаться на аутентификацию. Он также позволит централизованный доступ к разрешениям пользователя, данным и т. Д. – nggonzalez

+0

Это замечательно, спасибо @Akshay. –

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