我有一个身份验证过程,我希望能够从我的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)
由于导航控制器不是所有其他控制器/视图的父级,因此对问题来说似乎有些过分。他们可能是兄弟姐妹,或者他们根本没有使用嵌套状态的亲子关系。
如果您只是从导航栏 访问此注销方法,则只需要在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');