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

我需要构建一个可以成为不同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;
    });
  • 这种方式并不好,因为userCtrl在$ http回调(来自路由器的控制器)之前被调用,所以用户实际上是空的进入页面(我正在跳跃它将自动更新)。

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

    你和我一样多使用控制器吗? 您是否在“绑定”视图的相同控制器中处理这些REST API调用? 我很有兴趣知道!


    当你定义你的路由时,你可以定义一个名为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){});
    

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

    链接地址: http://www.djcxy.com/p/13593.html

    上一篇: Most optimize way to load datas to display on router's controller

    下一篇: AngularJs $routeProvider is not working with MVC