【发布时间】:2014-02-17 15:48:52
【问题描述】:
在我的 AngularJS 应用程序中,我使用带有 ng-view 指令的路由器。
除此之外,我还想添加一个通用标题(所有视图都相同)。所以我做了以下事情:
<!-- index.html -->
<body ng-app="myApp">
...
<div ng-controller="TopmenuCtrl" class="header">
<div ng-include="template.url"></div>
...
</div>
<div ng-view></div>
</body>
视图是动态的,取决于会话令牌:
<!-- views/topmenu.html -->
<ul class="nav nav-pills pull-right">
<li class="active"><a ng-href="#">Home</a></li>
<li><a ng-href="#">About</a></li>
<li><a ng-href="#">Contact</a></li>
<li ng-show="token"><a ng-href="#" ng-click="doLogout()">Logout</a></li>
</ul>
还有带有注销方法的topmenu控制器:
// controllers/topmenu.js
$scope.template = {url: 'views/topmenu.html'};
$scope.doLogout = function() {
localStorageService.clearAll();
$window.sessionStorage.token = '';
$location.path('/login');
};
问题是:当我在应用程序中单击“注销”时,会调用 topmenu 控制器并销毁会话,但也会调用来自路由器的主控制器并显示错误,因为会话已被销毁!
我发现防止这种情况的唯一(不令人满意的)解决方案是在应用程序的每个控制器中添加此代码:
if ($window.sessionStorage.token = '') {
return;
}
有没有办法执行标头控制器而不是主 ng-view 控制器?
【问题讨论】:
-
看看这个问题stackoverflow.com/questions/21699830/…,你可能会有一些想法。
标签: angularjs