Angularjs 我需要在angular中访问.run()模块中的一个变量,并需要在不同的控制器中更改它的值

Angularjs 我需要在angular中访问.run()模块中的一个变量,并需要在不同的控制器中更改它的值,angularjs,angularjs-rootscope,Angularjs,Angularjs Rootscope,这是我的.run模块,我需要初始化一个isAdmin变量,我可以在控制器中更改该变量,并检查isAdmin在每次状态更改时是否为true,并重定向到admin或chat页面。 我尝试将初始化的isAdmin添加为.run()中的$rootScope.isAdmin,但在我可以在控制器中修复其值之前,.run()抛出isAdmin未定义错误。 有人能提出解决办法吗 提前感谢查看下面的代码,它可能可以访问范围变量。注入服务是访问变量和方法的一种空闲方式,这些变量和方法可以在变量空间中重用 MyCtr

这是我的.run模块,我需要初始化一个
isAdmin
变量,我可以在控制器中更改该变量,并检查
isAdmin在每次状态更改时是否为
true,并重定向到
admin
chat
页面。 我尝试将初始化的
isAdmin
添加为
.run()
中的
$rootScope.isAdmin
,但在我可以在控制器中修复其值之前,
.run()
抛出
isAdmin
未定义错误。 有人能提出解决办法吗


提前感谢

查看下面的代码,它可能可以访问范围变量。注入服务是访问变量和方法的一种空闲方式,这些变量和方法可以在变量空间中重用

MyCtrl.js

MyService.js

app.js


查看下面的代码,它可以访问范围变量。注入服务是访问变量和方法的一种空闲方式,这些变量和方法可以在变量空间中重用

MyCtrl.js

MyService.js

app.js


您是否尝试调用服务?这对于在每个控制器中获取值非常有用。在控制器加载之前,我有4个事件。您必须检查该变量是否设置了值。使用
typeof isAdmin==“undefined”
检查是否未定义,然后执行相应的操作。您尝试调用服务了吗?这确实非常有用获取每个控制器状态中的值很有帮助在控制器加载之前有4个事件您必须检查该变量是否设置了值使用
typeof isAdmin==“undefined”
检查是否未定义,然后执行适当的操作。
.run(['$rootScope', '$state', 'Session', function ($rootScope, $state, Session) {
    $rootScope.$on('$stateChangeStart', function (e, toState) {
        console.log('inside .run')
        if (toState.url == '/') {
            e.preventDefault();
            if (Session.user) { // and isAdmin == true
                $state.go('admin')
             }  //if isAdmin == false redirect to chat

            else {
                $state.go('login')
            }
        } else if (!Session.user && toState.url != '/login') {
            e.preventDefault();
            $state.go('login')
        }    

        return;
    });
}])
(function () {
    'use strict'
    function MyCtrl($rootScope, $scope, MyService) {
        MyService.getRootScopeData();
        MyService.setRootScopeData('How are you?');
    }
    angular
            .module("AppRootTest")
            .controller('MyCtrl', ["$rootScope", "$scope", "MyService", MyCtrl]);
}());
(function () {
    'use strict'
    function MyService($rootScope) {
        function getRootScopeData() {
            console.log("$rootScope.getRooScopeData");
            console.log($rootScope.someData);
            return $rootScope.someData;
        }
        function setRootScopeData(value_) {
            $rootScope.someData = {message: value_};
        }
        return ({
            getRootScopeData: getRootScopeData,
            setRootScopeData: setRootScopeData
        });
    }
    angular
            .module("AppRootTest")
            .service("HzPopupService", ['$rootScope', MyService])
}());
angular.
    module('AppRootTest', ['ngResource','ngCookies','ngRoute','ui.router',])
    .config()
    .run(['$rootScope', function ($rootScope) {
            $rootScope.someData = {message: "hello"};
    }]);