【发布时间】:2015-06-04 03:45:24
【问题描述】:
我有一个想要重用的 CRUD 操作,所以我有一个通过 $routeProvider/resolve 传递给控制器的工厂。
但我看到控制器在工厂的 GET 请求返回之前解析。
如何设置承诺,使 $routeProvider 不会将 undefined 传递给控制器?
我的例子:
angular
.module('app',['ngRoute'])
.config(config)
.controller('appController', appController)
.factory('appFactory', appFactory);
function config($routeProvider){
$routeProvider
.when('/',{
templateUrl: 'template.html',
controller: 'appController',
resolve: {
server_stuff: function(appFactory){
// logging
console.log('appFactory.serverReponse = '+ appFactory.serverResponse() );
return appFactory.serverResponse();
}
}
});
}
function appController( $scope, server_stuff ){
$scope.content = server_stuff;
// logging
console.log('server_stuff = '+server_stuff);
}
function appFactory($http){
var i = 1;
var appFactory = {
serverResponse: serverResponse
};
// logging
console.log('Factory execution');
return appFactory;
function serverResponse(){
// logging
console.log('pre-GET ' + i);
$http.get('/endpoint/')
.success(function(data){
// logging
console.log('GET is done ' + i);
i++
return data;
});
}
}
日志输出:
'Factory execution'
'pre-GET 1'
'appFactory.serverReponse = undefined'
'pre-GET 1'
'server_stuff = undefined'
'GET is done 1'
'GET is done 2'
我的更改:
路由器解析:我选择传递$http函数,稍后执行
return appFactory.server; // no paren
工厂简化:
return $http.get('/endpoint/);
控制器:利用注入的工厂作为它应该是的服务器调用......
function appController( $scope, server_stuff ){
server_stuff().success( function(data){
// do stuff with the server info
});
【问题讨论】:
-
return data;在您的.success中不会从 severResponse 返回data。你应该直接返回承诺。
标签: angularjs angular-ui-router promise