所以这是我的一般问题,我有一个工厂需要进行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
}
]);
这可能吗?或者我错了吗?我希望能够访问用户的信息,而不必每次都使用promises,以防它已经不存在。
答案 0 :(得分:0)
您可以做的是设置工厂,以便记住用户数据。
像这样的东西
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/
答案 1 :(得分:0)
在状态路由器中,每个州都有解析属性。
.state({
name: 'myState',
resolve: {
user: function(myService) {
return myService.asyncGet();
}
}
然后在你的控制器中:
.controller('myController', function(user) {
$scope.myData = user.data; //no messy promises
});