首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs ng-show方法

Angularjs ng-show方法
EN

Stack Overflow用户
提问于 2015-07-23 19:04:53
回答 2查看 312关注 0票数 0

我有一个angular应用程序,我想根据权限显示一些数据,所以在我的主控制器上,我从服务器获取一些数据,看看哪些角色分配给了当前用户。

问题是,用于决定元素应该显示还是隐藏的方法是运行到服务器的异步调用,以查看角色。

代码语言:javascript
复制
<div class="menu">
    <a ng-show="$root.hasRole(['admin', 'tech'])" ng-cloak>
        <i class="grid layout icon"></i> Users
    </a>
    ....
</div>

和函数hasRole

代码语言:javascript
复制
controller('MainCtrl', [
    '$scope',
    '$rootScope',
    'WhoAmI',
    function($scope, $rootScope, WhoAmI) {
        $rootScope.whoAmI = false;

        $scope.init = function() {
            WhoAmI.whoAmI(function(err, res) {
                $rootScope.whoAmI = res.user;
            });
        };

        $rootScope.hasRole = function(roles) {
            if(!$rootScope.whoAmI){
                return false;
            }
            _.forEach($rootScope.whoAmI.roles, function(v, k) {
                if (v.name in roles) {
                    return true;
                }
            });

            return false;
        }
    }
])

正如您所期望的,元素在init函数的调用返回之前呈现,并保持隐藏状态。我将该方法hasRole附加到$rootScope,因为我希望它在整个应用程序中可用。

有没有办法暂停渲染,直到$rootScope.whoAmI不再为假,或者有没有更好的方法来处理这个问题?

EN

回答 2

Stack Overflow用户

发布于 2015-07-23 19:10:31

问题出在内部return true语句上。它返回true,但从内部函数返回;hasRole()函数仍然返回false。所以把它写成:

代码语言:javascript
复制
    $rootScope.hasRole = function(roles) {
        var result = false;
        if(!$rootScope.whoAmI){
            return false;
        }
        _.forEach($rootScope.whoAmI.roles, function(v, k) {
            if (v.name in roles) {
                result = true;
                return false; // we have the result, stop iterating
            }
        });

        return result;
    };
票数 0
EN

Stack Overflow用户

发布于 2015-07-23 19:19:07

这是错误的方式:

代码语言:javascript
复制
ng-show="$root.hasRole(['admin', 'tech'])"

您需要将其更改为:ng-show="hasRole(['admin', 'tech'])"

代码语言:javascript
复制
<div class="menu">
    <a ng-show="hasRole(['admin', 'tech'])" ng-cloak>
        <i class="grid layout icon"></i> Users
    </a>
    ....
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31585532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档