我有一个使用Rails的应用程序(用于身份验证/角色的Devise/CanCan)和一个AngularJS客户端。
我有三个角色-每个都有不同的导航菜单。我不希望在不同的导航栏中有3个不同的视图--我可以根据哪个用户加载导航元素来显示/隐藏导航元素吗?
有谁熟悉这个或有什么好主意吗?我做了一些狩猎,但没有成功.任何有用的东西!
发布于 2014-02-04 12:13:21
我知道你已经给出了答案,但我想指出一个与表现有关的细微差别。
根据菜单和HTML的大小,您可能希望超越ng-show使用ng-if。ng显示的问题是所有节点都被编译,即使是用户永远不会使用的节点也是如此。例如,Manager可能从不使用Admin或用户节点,但它们仍然被解析和编译。
如果使用ng-如果可以避免这种情况,并且只在条件为真时呈现/编译片段。由于您总是要使用相同的控制器,所以不必重复:
<div ng-controller="AccountController">
<div ng-if="IsAdmin()">...admin nav...</div>
<div ng-if="IsUser()">...user nav...</div>
</div>
我们是在一个巨大的角度应用和小的变化,像这样,获得主要的性能利益。当"if“表达式失败时,元素将从DOM中移除,并且从不编译,而ng显示时仍将编译该元素并将其隐藏。
发布于 2014-02-04 10:46:00
你可以使用ng显示标签。
你会做这样的事情:
<div ng-show="IsAdmin()" ng-controller="AccountController" >...admin nav...</div>
<div ng-show="IsUser()" ng-controller="AccountController" >...user nav...</div>
<div ng-show="IsManager()" ng-controller="AccountController" >...manager nav...</div>
..Controller
$scope.IsAdmin = function(){
return $scope.UserRole == "Admin";
}
$scope.IsUser = function(){
return $scope.UserRole == "StandardUser";
}
$scope.IsManager = function(){
return $scope.UserRole == "Manager";
}
在您的控制器中,您将根据角色确定一些逻辑来显示每个nav,然后返回true/false。
https://stackoverflow.com/questions/21560555
复制相似问题