Javascript Angular JS方法在配置后运行

Javascript Angular JS方法在配置后运行,javascript,html,angularjs,frontend,Javascript,Html,Angularjs,Frontend,我需要在RUN方法中执行一个请求,以从api检索de-user数据。 第一页(主页)取决于用户数据 以下是我的控制台中的调度顺序: 配置 运行 初始化获取用户数据 侧边栏 主页 成功获取用户数据 我的问题是,在调用侧栏和主页(控制器和视图)之前,我需要等待用户数据,我不知道如何才能做到这一点 更新 到目前为止,我有以下几点: 我的配置: extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider

我需要在RUN方法中执行一个请求,以从api检索de-user数据。 第一页(主页)取决于用户数据

以下是我的控制台中的调度顺序:

配置
运行
初始化获取用户数据
侧边栏
主页
成功获取用户数据

我的问题是,在调用侧栏和主页(控制器和视图)之前,我需要等待用户数据,我不知道如何才能做到这一点


更新

到目前为止,我有以下几点:

我的配置:

    extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider, $routeProvider) {
         // My ROUTE CONFIG
         console.log('CONFIG');
    }]);
我的跑步:

    extranet.run(function($rootScope, $location, $http, Cookie, Auth, Session) {
        console.log('RUN');
        var token = Cookie.get('token');

        // The login is done
        var success = function (data) {
            Session.create(data);
            console.log('USER DATA SUCCESS');
        };

        var error = function () {
            $location.path('/login');
        };

        // GET USER DATA
        Auth.isAuthenticated().success(success).error(error);
    });
我的主控制器:

    extranet.controller('MainCtrl', function ($scope, $location) {
        console.log('MAIN CONTROLLER');
    });

如果您对服务器请求使用AngularJS方法,您将得到一个承诺。一旦收到回复,承诺就会得到解决。所有定义的回调都“等待”到解析

原始解决方案 因此,如果您有类似REST的后端,您将使用
$http
甚至
$resource

var promise = $http.get(userDataUrl, params)
$rootScope.userDataPromise = promise;
之后,您可以在任何需要数据的地方使用该承诺:

$rootScope.userDataPromise.then(myCallback)
更好的解决方案 不过,为此目的使用
$rootScope
并不是一个优雅的解决方案。您应该将Userdata内容封装在服务中,并在需要时注入它

app.factory('UserData', ['$http',
    function($http) {
        var fetch = function() {
            return $http.get(userDataUrl, params)
        };

        return {
            fetch: fetch
        };
    }
]);
现在,您可以在其他模块中使用该服务:

app.controller('MainCtrl', ['$scope', 'UserService',
    function ($scope, UserService) {
        var update = function(response) {
            $scope.userData = response.userData;
        }

        var promise = UserService.fetch();
        promise.then(update)
    }
);
使用解析器

extranet.config(['$httpProvider', '$routeProvider', function ($httpProvider, $routeProvider) {
         // My ROUTE CONFIG
         $routeProvider.when('/', {
                   templateUrl: "/app/templates/sidebar.html",
                   controller: "siderbarController",
                   title: "EventList",
                   resolve: {
                        events: function ($q, Cookie,Session) {
                             var deffered = $q.defer();
                             Cookie.get('token').$promise
                                   .then(function (events) {
                                        Session.create(data);
                                        console.log('USER DATA SUCCESS');
                                        deffered.resolve(events);
                                     }, function (status) {

                                         deffered.reject(status);
                                    });

                                return deffered.promise;
                        }
                   }
    }]);

我希望你能有所了解。

你已经有了什么?嘿,Fals,我在我的帖子中添加了一个更新来向你展示我的代码。我有一个配置、运行和控制器。在de RUN内部,我有加载用户数据的代码。我认为,您需要在拥有用户数据后广播一个事件,只有这样您才能加载侧栏和主页。另一种方法是在路由配置中使用解析器。这样会更有效率。@user3398887,我将搜索有关解析器和广播的信息。你有什么例子吗?谢谢你的帮助。还有一个例子。基本上,您希望在显示页面之前加载内容,您可以使用$routeProvider上的resolve对象来实现这一点。