大多数优化方式来加载数据以显示在路由器的控制器上
我需要构建一个可以成为不同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