Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ajax返回时的角度加载路由_Javascript_Angularjs_Ajax - Fatal编程技术网

Javascript ajax返回时的角度加载路由

Javascript ajax返回时的角度加载路由,javascript,angularjs,ajax,Javascript,Angularjs,Ajax,如何延迟/延迟路由/控制器,直到匿名函数返回?在应用程序引导中,我将默认rootScope.me作为来宾帐户,直到它可以检查登录用户的cookies 我有一个控制器,testCtrl,它依赖于rootScope.me数据来加载适当的用户数据。控制器在rootScope.me有机会设置为用户之前触发 我知道Angular有解决承诺的服务,但不确定如何将其应用于路由 angular .module('DDE', []) .run(['$rootScope', 'Me', functi

如何延迟/延迟路由/控制器,直到匿名函数返回?在应用程序引导中,我将默认
rootScope.me
作为来宾帐户,直到它可以检查登录用户的cookies

我有一个控制器,
testCtrl
,它依赖于
rootScope.me
数据来加载适当的用户数据。控制器在
rootScope.me
有机会设置为用户之前触发

我知道Angular有解决承诺的服务,但不确定如何将其应用于路由

angular
    .module('DDE', [])
    .run(['$rootScope', 'Me', function($rootScope, Me) {

        $rootScope.me = {
            username : 'Guest',
            id : -1
        };

        if (Cookies.get('user_id') && Cookies.get('username')) {
            Me.getProfile({user_id : Cookies.get('user_id')}).success(function (res) {
                $rootScope.me = res;
            }).error(function (err) {
                console.log('Error: ', err);
            });

        }
}])
.config(['$routeProvider', '$httpProvider', '$authProvider',
           $routeProvider.
                when('/test', {
                    templateUrl: '/html/pages/test.html',
                    controller: 'testCtrl'
                }).


编辑:添加angular的ngRoute示例

你可以调查一下。它基本上是在加载/导航到您的州/路线之前等待您的承诺得到解决

文档 必须解析以下解析中的每个对象(通过 如果它们是承诺,则延迟.resolve() 实例化。请注意如何将每个resolve对象作为 参数输入到控制器中

以下是angular的ngRoute示例:


所以,
$routeProvider
不支持延迟的ds?因此,我必须将我的
routeProvider
替换为
stateProvider
?$routeProvider也支持解析。我现在使用的另一个解决方案是使用BlockUI阻止页面。我添加了ngRouterexample@HenryZou你好请看上面。解析时如何根据需要注入服务,如
Me
$rootScope
?在
config
阶段中,您不能要求提供程序()延迟:函数($q,$timeout){var delay=$q.defer();4$timeout(delay.resolve,1000);返回delay.promise;}
.config(['$routeProvider', '$httpProvider', '$authProvider', '$stateProvider', '$urlRouterProvider',
    function($routeProvider, $httpProvider, $authProvider, $stateProvider, $urlRouterProvider) {

       //Cannot inject services like Me or $rootScope as I need

        function loadProfile () {
            Me.getProfile({user_id : Cookies.get('user_id')}).success(function (res) {
                $rootScope.me = res;
            }).error(function (err) {
                console.log('Error: ', err);
            });
        }

        $stateProvider.
            state('test', {
                url : '/test',
                templateUrl: '/html/pages/test.html',
                controller : 'testCtrl',
                resolve : {
                    ProfileLoaded : function () {
                        return loadProfile();
                    }
                }
            });
.config(function($routeProvider, $locationProvider) {
  $routeProvider
   .when('/Book/:bookId', {
    templateUrl: 'book.html',
    controller: 'BookController',
    resolve: {
      // I will cause a 1 second delay
      delay: function($q, $timeout) {
        var delay = $q.defer();
        $timeout(delay.resolve, 1000);
        return delay.promise;
      }
    }
  })