在我的AngularJS中,我有以下代码,我检查是否有当前登录的用户,以便将顶级应用程序菜单文本从登录切换到Logout(如果没有用户登录则登录),反之亦然。当我使用ng-show ng-hide时,应用程序开始变得非常沉重,所以我尝试切换到ng-if,但是顶部菜单上的css效果开始不能在登录/注销选项卡中专门工作。那么请有人请告诉我处理这种情况的最佳方法是什么?感谢
index.html
<div ng-controller="MenuController">
<li>
<div ng-if="userLevel() == 1">
<a href="#/login">Login</a>
</div>
<div ng-if="userLevel() == 2">
<a href="#/logout">Logout</a>
</div>
</li>
</ul>
</div>
控制器:
controller('MenuController',
function MenuController($scope, UService){
$scope.userLevel = function(){
var userType = UService.checkULevel(); //This will return either 1, 2,3,4...etc
return userType;
};
});
答案 0 :(得分:1)
ng-show
和ng-if
之间的区别在于ng-show
在指定表达式为false值时将display: none
应用于元素,而ng-if
从DOM中删除节点,基本上等同于jQuery中的.empty
。
您可以考虑为您的元素采用的方法,而不是在控制器中使用它,使用指令访问级别,并遵循本文中描述的方法,这非常灵活,允许您使用不同的元素UI取决于用户级别:http://frederiknakstad.com/2013/01/21/authentication-in-single-page-applications-with-angular-js/
当您检查用户级别时应用程序运行缓慢的另一个原因可能是,每次评估时,您的应用程序必须在服务器端执行检查,从而减慢应用程序的速度。它的一种方法是缓存该查询的结果,然后在登录状态不变时使用它。在该阶段,您可以使缓存无效并再次获取用户级别,准备更新UI。
答案 1 :(得分:1)
ng-if
指令从页面中删除内容,ng-show/ng-hide
使用CSS显示属性隐藏内容。
我很确定没有节目比ng更轻 - 如果没有节目不应该使应用程序太重。如果它变得沉重,我认为可能还有其他原因。
答案 2 :(得分:1)
如果使用ng-if
,则仅在条件为真时才呈现节点
在ng-show ng-hide
的情况下,如果条件发生变化,将显示/隐藏
答案 3 :(得分:1)
当你使用ng-if
时,它只会渲染满足条件的代码。
虽然ng-show ng-hide
将在页面上呈现代码,但会在CSS属性的帮助下隐藏。
最好使用ng-if
来减少要在页面上呈现的代码行。