Angular JS resolve in a resolve
Angular JS resolve in a resolve
我所说的resolve in a resolve 的意思是我希望能够先解析用户,然后再解析他的所有附加信息,例如地址、联系人、朋友。
我目前拥有的:
.state('website', {
url : '',
abstract : true,
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
return Auth.requestUser();
}]
},
views : {
'main' : {
templateUrl : 'template.html'
}
}
})
我想做的是:
.state('website', {
url : '',
abstract : true,
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
Auth.requestUser().then(function(){
// HERE I WANT TO RESOLVE OTHER RESOURCES
// WHAT WILL I RETURN HERE?
});
}]
},
views : {
'main' : {
templateUrl : 'template.html'
}
}
})
我不确定这是否可行。
你可以这样做。
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
var deferred = $q.defer();
Auth.requestUser().then(function(){
// Call this deferred.resolve in inner asyc callback
deferred.resolve(data);
});
return deferred.promise;
}]
}
或
您也可以使用链接
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth, userInformation){
var authData;
return Auth
.requestUser()
.then(function (_authData) {
// do something with dataFromAuth
authData = _authData;
return userInformation.getDetailInfoAboutUser(_authData.userid);
})
.then(function (detailedUserInfoObject) {
// do something with dataFromOtherResource and return
detailedUserInfoObject.authInfo = authData;
return detailedUserInfoObject;
});
}]
}
您可以将 "resolved" 参数注入其他解析函数:
resolve: {
current_user: ['Auth', function(Auth){
return Auth.requestUser();
}],
// "Svc" here is some service I assume you have to get friends, address, etc...
friends: ["Svc", "current_user", function(Svc, current_user){
// Svc.getFriends can return a promise or a value
return Svc.getFriends(current_user);
}],
address: ["Svc", "current_user", function(Svc, current_user){
return Svc.getAddress(current_user);
}]
}
然后,在该状态的控制器中,您可以将 current_user
、friends
和 address
作为参数注入:
.controller("WebsiteMainViewCtrl", function($scope, current_user, friends, address){
// ...
})
我所说的resolve in a resolve 的意思是我希望能够先解析用户,然后再解析他的所有附加信息,例如地址、联系人、朋友。
我目前拥有的:
.state('website', {
url : '',
abstract : true,
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
return Auth.requestUser();
}]
},
views : {
'main' : {
templateUrl : 'template.html'
}
}
})
我想做的是:
.state('website', {
url : '',
abstract : true,
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
Auth.requestUser().then(function(){
// HERE I WANT TO RESOLVE OTHER RESOURCES
// WHAT WILL I RETURN HERE?
});
}]
},
views : {
'main' : {
templateUrl : 'template.html'
}
}
})
我不确定这是否可行。
你可以这样做。
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth){
var deferred = $q.defer();
Auth.requestUser().then(function(){
// Call this deferred.resolve in inner asyc callback
deferred.resolve(data);
});
return deferred.promise;
}]
}
或
您也可以使用链接
resolve : {
// Request the current signed in user >
current_user : ['Auth', function(Auth, userInformation){
var authData;
return Auth
.requestUser()
.then(function (_authData) {
// do something with dataFromAuth
authData = _authData;
return userInformation.getDetailInfoAboutUser(_authData.userid);
})
.then(function (detailedUserInfoObject) {
// do something with dataFromOtherResource and return
detailedUserInfoObject.authInfo = authData;
return detailedUserInfoObject;
});
}]
}
您可以将 "resolved" 参数注入其他解析函数:
resolve: {
current_user: ['Auth', function(Auth){
return Auth.requestUser();
}],
// "Svc" here is some service I assume you have to get friends, address, etc...
friends: ["Svc", "current_user", function(Svc, current_user){
// Svc.getFriends can return a promise or a value
return Svc.getFriends(current_user);
}],
address: ["Svc", "current_user", function(Svc, current_user){
return Svc.getAddress(current_user);
}]
}
然后,在该状态的控制器中,您可以将 current_user
、friends
和 address
作为参数注入:
.controller("WebsiteMainViewCtrl", function($scope, current_user, friends, address){
// ...
})