所以基本上我在$ routeProvider中使用resolve,以便在我实例化控制器之前获取当前用户的信息。 我就是这样做的:
userMan.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/userManagement', {
templateUrl: 'userManagement/userManagement.html',
controller: 'userManCtrl',
resolve: {
myUser:function($http){
console.log("I am about to make the call");
$http.get("/irods-cloud-backend/searchByMetadata/getCurrentUser").then( function( result ) {
console.log(result.data);
return result.data;
},
function( result ) {
alert("Unable to find any users! Please try again...");
})
}
}
});
}]);
我的控制器看起来像这样:
userMan.controller('userManCtrl', ['$scope', '$log', '$http', '$location', 'myUser',
function($scope, $log, $http, $location, myUser){
var currUser = myUser;
基本上我的错误是currUser未定义。这可以防止我检查用户的权限等。 我也用过:
$scope.$on('$routeChangeSuccess',function(event, current){
alert("loaded!!");
});
要查看此承诺何时解决,但我在加载到标签后立即看到警告消息。 然后我尝试使用虚拟返回对象,就像
一样return { someAttr: 'val'};
这个功能很好..我知道它不是一个承诺,但出于理智目的而这样做..
错误的任何线索?
答案 0 :(得分:1)
你没有从myUser方法返回,所以除了undefined
之外没有什么值得等待的。正如@JoelCDoyle所评论的那样:
您的解决方法必须返回一个承诺。 $ http方法返回一个promise。
resolve: {
myUser:function($http){
// return here!
return $http.get("/irods-cloud-backend/searchByMetadata/getCurrentUser").then( function( result ) {
console.log(result.data);
return result.data;
}
答案 1 :(得分:0)
在@JoelCDoyle和@baao的反馈之后,我采用了不同的方法。 我只是创建了一个处理GET请求的服务,并在我的决心中使用了它。 有关详细信息,请查看here