我需要构建一个可以是不同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"你的看法?我很有兴趣知道!
答案 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){});
在解除承诺之前,路线不会改变。