在 .state 中使用 $rootScope 的不同用户角色的不同选项卡

Posted

技术标签:

【中文标题】在 .state 中使用 $rootScope 的不同用户角色的不同选项卡【英文标题】:Different tabs for different user roles using $rootScope in .state 【发布时间】:2017-03-20 00:10:08 【问题描述】:

我的目标是为不同的用户提供不同的标签布局 像病人和医生一样

在我的控制器中,我将登录的用户存储在 $rootScope.currentUser 中,如下所示

$auth.login(credentials).then(function(data) 
           return $http.get(CONSTANTS.LINK+'/authenticate/user');
        , function(data) 
            var alertPopup = $ionicPopup.alert(
            title: 'Error Logging in',
            template: 'Invalid Credentials'
            );
            alertPopup.then(function(res) 
            );
        ).then(function(response) 
                var user = JSON.stringify(response.data.user);
                localStorage.setItem('user', user);
                $rootScope.authenticated = true;
                $rootScope.currentUser = response.data.user;
                $state.go('tabs.home');
            );; 

现在这是我的 app.js。什么都没发生。我做对了吗? 当我尝试 console.log($rootScope.currentUser);

时,$rootscope.currentUser 也会返回 undefined
.state('tabs', 
        url: '/tab',
        templateUrl: function ($rootScope) 
          if($rootScope.currentUser.role == 'Patient') 
            return 'templates/tabs.html';
           else if ($rootScope.currentUser.role == 'Doctor') 
            return 'templates/tabs-doctors.html';
          
        ,
        abstract: true,
    )

【问题讨论】:

我有点认为你在处理这一切都是错误的。我在想的是你应该为医生和病人创建不同的状态,然后在你的 .run(或准备好)函数中检查用户并使用 $state.go。我相信这可以带你走向正确的方向***.com/questions/27907670/… 也可以参考这个链接***.com/questions/23429055/…还有一个***.com/questions/25047884/… @Marko 谢谢你,先生!我会看看这个 ui-router 没有为 templateURL 函数使用 $injector 服务。它使用params 参数调用该函数。有关详细信息,请参阅ui-router $stateProvider API Reference。期望$rootScope 被注入该函数是错误的。 @Marko,我发布了我的解决方案:D 【参考方案1】:

由于我在他登录时将用户数据存储在本地存储中,因此我使用该数据来检查用户的角色。

.state('tabs', 
        url: '/tab',
        templateUrl: function () 
          var user = JSON.parse(localStorage.getItem('user'));
          role = user.role;
          if(role == 'Patient') 
            return 'templates/tabs.html';
           else if (role == 'Doctor') 
            return 'templates/tabs2.html';
           else 
            return 'templates/tabs.html';
          
        ,
        abstract: true,
    )

【讨论】:

以上是关于在 .state 中使用 $rootScope 的不同用户角色的不同选项卡的主要内容,如果未能解决你的问题,请参考以下文章

排序。

如何显示角度工厂的dom

错误:$rootScope:inprog 操作已经在进行中 mvc 与 angularjs

如何删除 angularjs 中的 $rootScope 变量? [复制]

是否可以使用 $rootScope 作为存储在 Angular 1 中实现类似 Redux 的架构?

获取 AngularJS 错误:“[$rootScope:inprog] $digest 已经在进行中”没有手动 $apply