2014-09-26 88 views
0

所以这里是我的一般问题,我有一个工厂,需要做一个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,以防万一它不在那里。

+0

我不知道为什么你担心使用的承诺。如果只是检查用户是否在那里,如果没有做什么,如果没有,那么使用工厂承诺来设置它。 – Scott 2014-09-26 17:42:16

回答

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/

0

在状态路由器,有解决财产每个州。

.state({ 
    name: 'myState', 
    resolve: { 
    user: function(myService) { 
     return myService.asyncGet(); 
    } 
    } 

然后在你的控制器:

.controller('myController', function(user) { 
    $scope.myData = user.data; //no messy promises 
});