大多数优化方式加载数据以显示在路由器的控制器上

时间:2014-05-05 17:08:56

标签: angularjs

我需要构建一个可以是不同REST API调用的用户(每种方式来自特定路由)。

我们可以访问这个例子:

  • http://myapp/#user/:pseudo
  • http://myapp/#user/:user_id

    angular.module('Test').config(['$routeProvider',
        function($routeProvider) {
            $routeProvider.
                when('/user/:pseudo', {
                    templateUrl: 'views/user.html',
                    controller: 'userFromPseudoCtrl'
                }).
                when('/user/:user_id', {
                    templateUrl: 'views/user.html',
                    controller: 'userFromIdCtrl'
                }).
                otherwise({
                    redirectTo: '/'
                });
        }
    ]);

然后,我有3个不同的控制器:

  • userFromPseudoCtrl
  • userFromIdCtrl
  • userCtrl(控制视图)

    angular.module('Test').controller('userFromPseudoCtrl', function($User, $http) {
        $http.get('/getUserFromPseudo/test')
        .success(function(User) {
             $User.set(User);
        });
    });
    
    angular.module('Test').controller('userFromIdCtrl', function($User, $http) {
        $http.get('/getUserFromId/test')
        .success(function(User) {
             $User.set(User);
        });
    });
    
    angular.module('Test').controller('userCtrl', function($scope, $User) {
        $scope.User = $User;
    });

这种方式并不好,因为在$ http回调之前调用了userCtrl(来自路由器的控制器),所以用户实际上是空的进入页面(我正在自动跳转它更新)。

在我尝试使用它(使用$rootScope.$apply())之前,我想知道什么是更优化的方式来执行这种过程(从路由器的控制器加载数据然后显示它)。 / p>

你和我一样使用多少个控制器吗?您是否在同一个控制器中处理这些REST API调用" bind"你的看法?我很有兴趣知道!

1 个答案:

答案 0 :(得分:0)

定义路径时,您可以定义一个名为resolve的附加值,该值是一个对象,其中每个字段都是一个承诺,当解析时将注入到您的控制器中:

路线定义:

when('/user/:pseudo', {
    templateUrl: 'views/user.html',
    controller: 'userFromPseudoCtrl'
    resolve: {dataNeeded: userPseudoService.getUserData()});

服务():

angular.module('Test').service('userPseudoService', function($http){
    return $http.get('/getUserFromPseudo/test');
});

控制器:

angular.module('Test').controller('userFromPseudoCtrl', function(dataNeeded){});

在解除承诺之前,路线不会改变。