更新另一家工厂的工厂数据

时间:2016-08-03 11:19:27

标签: angularjs factory

我的角度应用程序中有两个工厂。

app.factory('FavoritesArtists',['$http', '$q', 'UserService', function($http, $q, UserService){
    var deferred = $q.defer();
    var userId = UserService.getUser().userID;

    $http.get('http://myurl.com/something/'+userId)
    .success(function(data) {
        deferred.resolve(data);
    })
    .error(function(err) {
        deferred.reject(err);
    });

    return deferred.promise;
}]);

我从另一家工厂获得了价值:

var userId = UserService.getUser().userID;

但是当UserService.getUser()发生更改时我没有更新,视图随$ watch一起更改,但我不知道它在工厂内是如何工作的。

欢迎任何帮助,谢谢你们!

2 个答案:

答案 0 :(得分:1)

任何人?

app.factory('FavoritesArtists',['$http', '$q', 'UserService', function($http, $q, UserService){
  var deferred = $q.defer();

  $http.get('https://homechefhome.fr/rise/favorites-artists.php?user_id='+userId)
  .success(function(data) {
      deferred.resolve(data);
       })
      .error(function(err) {
          deferred.reject(err);
      });

  return deferred.promise;
}]);

我只需要使userId变量动态化..

答案 1 :(得分:0)

这是一个更好的设计模式

app.factory('UserService', 
['$http', function($http) {

    var getUser = function() {
        return http.get("url_to_get_user");
    };

    return {
        getUser: getUser
    };

}]);

app.factory('ArtistService', 
['$http', '$q', 'UserService', function($http, $q, UserService) {

    var getFavoriteArtists = function() {

        UserService.getUser().then(function(response) {

            var userId = response.data.userID;
            return $http.get('http://myurl.com/something/' + userId);

        }, function() {

            //passing a promise for error too
            return $q.reject("Error fetching user");

        });
    };

    return {
        getFavoriteArtists: getFavoriteArtists
    };

}]);

现在在控制器中调用它,

ArtistService.getFavoriteArtists().then(function(response) {

    //do something with response.data

}, function(response) {

    //log error and alert the end user

});