我正在尝试显示div取决于登录用户的权限。
<div class="container">
<p> {{permission}}</p>
<div ng-show="permission" class="admin_panel">
....
</div>
</div>
并在控制器中设置:
$scope.init = function(){
if($window.sessionStorage.isAdmin){
$scope.permission = $window.sessionStorage.isAdmin;
}
$log.info("are you admin??? " + $scope.permission);
};
$scope.init();
在控制台中,我可以验证权限是否设置为false,{{permission}}
也显示
它的价值是假的。但是,即使值为false,ng-show仍然显示。我不确定这有什么问题。
答案 0 :(得分:8)
你试过ng-show="permission === true;"
吗?根据我的理解,ng-show
旨在评估引号内的任何内容。这只会明确说明评估。我有过这样的经历:在引号内加一个变量并不是ng-show
因某些奇怪的原因而认可的评价。
答案 1 :(得分:6)
我有一个类似的问题,除了我的变量在里面被改变了 像这样的超时函数:
<div ng-show="check"> something .... </div>
setTimeout(function(){
check = false;
},500);
当我添加$ scope时,问题解决了。$ apply()在timeout内:
setTimeout(function(){
check = false;
$scope.$apply()
},500);
答案 2 :(得分:2)
如果您想显示或隐藏某些取决于用户权限的内容,而不是使用&#34; ng-show&#34;,您应该使用&#34; ng-if&#34;。
ng-show / ng-hide仅添加或删除显示或隐藏该元素的CSS类(display:none),但用户可以在浏览器中轻松更改它。
使用ng-if:&#34;如果分配给ngIf的表达式求值为false值,则从DOM中删除该元素,否则将元素的克隆重新插入DOM中。&#34;
答案 3 :(得分:1)
我有同样的问题,除了ng-show之外,每件事情都很好。我错过了一些愚蠢的东西。当您从文档的不同部分调用控制器时,您无法在它们之间共享数据。例如,我有2个div标签
<div id="1" ng-controller="contentCtrl">
<div ng-click="toggleSidebarShow()">
<!-- some code here -->
</div>
</div>
<div id="2" ng-controller="contentCtrl">
<div ng-show="showSidebar">
</div>
</div>
// some code
$scope.showSidebar = true;
$scope.toggleSidebar = function (){
$scope.showSidebar = ! $scope.showSidebar;
};
但是此代码不起作用,因为在div2标记之外调用toggleSidebar并拥有它自己的showSidebar。要解决此问题,您必须使用服务或模块。请参阅this链接以获取更多信息。
答案 4 :(得分:0)
要检查的另一件事是当您的页面加载时,在inspect元素中检查您尝试使用ng-show的元素是否在具有ng-controller指令的元素内呈现。
如果你的ng-show元素在ng-controller元素之外,则ng-show将不起作用