2016-11-24 1 views
0

У меня есть процесс аутентификации, где я хочу иметь доступ к функции выхода на любую страницу из моей панели указателей Index.html, но по какой-то причине я 'не доходит до объема.Я хочу получить доступ к функции выхода из моей навигационной панели на любой странице

У меня есть контроллер app.js, но когда я переключаю виды, этот контроллер заменяется. Поэтому я ставлю функцию ниже на новом представлении:

$scope.logout = function() { 
    AuthService.logout(); 
    $state.go('login'); 
}; 

Но когда я называю это из моего index.html нав я не могу получить доступ к функции.

Я использую ui-router.

Так что мой макет выглядит так:

<html> 
    <nav></nav> 
    <ui-view></ui-view> 
<html> 

Где бы вы положили и получить доступ к функции выхода из системы, которые могут быть доступны из любой точки мира?

+0

просьба представить полный пример. –

+0

, если ваша панель навигации является директивой/компонентом и имеет свой собственный объем, она никогда не достигнет этого метода. но сначала укажите, что у вас есть. – alphapilgrim

+0

https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views - использовать вложенное состояние из родительского состояния шаблона с кнопкой выхода. Затем разрешите функции кнопки выхода. –

ответ

0

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

Если вы только доступ к этому методу выхода из системы из вашей навигационной панели только, вам просто нужно будет создать/объявить, что контроллер в ng-controller директивы, как например:

nav.html

<nav ng-controller="NavigationCtrl" /> 
    <ul> 
     <li>Home</li> 
     <li ng-click="logout()">Logout</li> 
    </ul> 
</nav> 

Если вы обращаетесь к этому методу из любого места в своем приложении, я бы создал директиву и прослушал событие $rootScope, например:

logout.directive.js

.directive('logout', logoutMethod); 

logoutMethod.$inject = [ 
    '$rootScope', 
    'AuthService', 
    '$state' 
]; 

function logoutMethod(
    $rootScope, 
    AuthService, 
    $state 
){ 
    return { 
     restrict: 'A', 
     link: function() { 
      $rootScope.$on('initiateLogout', function() { 
       AuthService.logout(); 
       $state.go('logout'); 
      }); 
     } 
    }; 
}); 

, а затем где-то в вашем приложении,

$rootScope.$emit('initiateLogout'); 
Смежные вопросы