角度解决承诺依赖
问题描述:
所以这里是我的一般问题,我有一个工厂,需要做一个Ajax调用来获得它的价值。我想注入这个工厂,但只有在ajax调用被解析之后,意味着当它被注入时,我希望这个值已经存在。这可能吗?让我给你一些背景,以便你可以给我一个更好的选择。角度解决承诺依赖
我有一个UserFactory。
var app = angular.module('app',[]);
app.factory('UserFactory',[
function(){
//ajax call to get the user object
//dont allow injection until user has arrived
}
]);
var home = angular.module('home',[]);
home.controller('UserInfoController',[
'UserFactory',//I don't want this resolved until the ajax call has completed
function(User){
//bind user data to the view
}
]);
这可能吗?或者我正在讨论这个错误?我希望能够访问用户的信息,而不必每次都使用promise,以防万一它不在那里。
答
你可以做的是建立你的工厂,以便记住用户数据。
像这样的事情
app.factory('userFactory', function ($http){
return {
getUser: function(){
return $http({
method: 'GET',
url: ''
});
},
currentUser: {}
};
});
所以后来在你的控制器,检查是否存在任何currentUser。如果不进行getUser调用并将其存储到currentUser中。由于工厂是单身人士,用户数据将始终存在于工厂内,您可以将其注入任何需要的地方。
下面是一个例子:http://jsfiddle.net/4m6gmsw2/
如果您仍需要用户数据注入之前,在那里你可以看看使用的决心:https://thinkster.io/egghead/resolve/
答
在状态路由器,有解决财产每个州。
.state({
name: 'myState',
resolve: {
user: function(myService) {
return myService.asyncGet();
}
}
然后在你的控制器:
.controller('myController', function(user) {
$scope.myData = user.data; //no messy promises
});
我不知道为什么你担心使用的承诺。如果只是检查用户是否在那里,如果没有做什么,如果没有,那么使用工厂承诺来设置它。 – Scott 2014-09-26 17:42:16