问题:
如何向隐藏ng-view
DOM之外的元素的角度应用添加“登录”视图/路线?
情况:
在我的Angular页面中,左侧是导航树视图,中间是主视图:
<div ng-app="myApp">
<div class="col-sm-3" ng-controller="TreeController">
<div treeviewdirective-here>
</div>
</div>
<div class="col-sm-9 content" ng-view="">
</div>
</div>
树视图中的每个节点都使用window.location.hash = '#/' + routeForTheClickedItem;
等内容更改位置。
使用标准路由,这很有用,即每次都不会重新加载树,而只是主窗口。
问题:
我想添加登录视图的登录功能。对于此视图,只有在登录后才能看到树视图。为了通过正常路由实现这一点,我知道我可以将ng-view
向上移动一级,即将树视图嵌入到每个视图中 - 但这会导致树视图在每次路径更改时重新加载。
是否有一个简单的替代方案可以让我检查ng-view中显示的页面?或者在路由期间检查一些其他变量集?然后我可以使用类似的东西:
<div class="col-sm-3" ng-controller="TreeController" ng-show="IsUserLoggedIn">
答案 0 :(得分:3)
您可以在ng-view
之外侦听routeChangeSuccess$scope.$on('$routeChangeSuccess', function (event, currentRoute, previousRoute) {
//do something here
});
希望有所帮助,你可以在angularjs IRC上找到我 - maurycyg
答案 1 :(得分:2)
您可以在顶级div级别定义一个控制器。
类似的东西:
<div ng-app="myApp" ng-controller="MainController">
并在MainController
中注入Session
。像Session
之类的东西足以决定是否显示树。
以下是MainController
:
_app.controller('MainController', function ($scope, SessionService) {
$scope.user = SessionService.getUser();
});
以下是SessionService
:
_app.factory('SessionService', function() {
var user = null;
return {
getUser : function() {
return user;
},
setUser : function(newUser) {
user= newUser;
}
};
});
当然,登录时必须将用户设置为SessionService
。因此,SessionService
也必须注入LoginController
。
最后,你的HTML:
<div ng-app="myApp" ng-controller="MainController">
<div class="col-sm-3" ng-controller="TreeController">
<div ng-hide="user == null" treeviewdirective-here>
</div>
</div>
<div class="col-sm-9 content" ng-view="">
</div>
</div>