2015-06-28 13 views
1

我正在构建由第三方API支持的AngularJS应用程序。我有一个这样的基本资源:AngularJS - 如果API响应为null,则初始化ngResource对象

module.factory('UserPreference', function($resource) { 
    return $resource('/users/:user_id/preferences/:preference_type_id', { 
    user_id: "@user_id", 
    preference_type_id: "@preference_type_id" 
    }) 
}) 

如果用户没有指定某个首选项类型的首选项,结果将为空。我想在响应为空的情况下初始化对象。

{user_id: 1, preference_type_id: 1, preference: null} 

我可以看到两个选项:

  1. 工厂内transformResponse做到这一点
  2. 处理它在控制器

1似乎是一个清洁的选择,因为这是真的一个数据问题不仅仅是一个控制器问题,但我无法弄清楚如何做到这一点的细节。具体而言,我无法访问传递给资源的:user_id和:preference_type_id params。

我应该在控制器中处理这个问题吗?有什么明显的我失踪了吗?

回答

0

包裹它,只要你喜欢,你可以调用多次的函数。

module.factory('UserPreference', function($resource, $q) { 
    var resouce = $resource('/users/:user_id/preferences/:preference_type_id', { 
    user_id: "@user_id", 
    preference_type_id: "@preference_type_id" 
    }); 
    return function (userId, preferenceTypeId) { 
    var promise = $q.defer(); 
    var defaultPreference = {user_id: 1, preference_type_id: 1, preference: null}; 
    $q.when(resouce.get({user_id: userId, preference_type: preferenceTypeId})) 
    .then(function (userPreferences) { 
     promise.resolve(userPreference || defaultPreference); 
    }, function() {promise.reject('error')}); 

    return promise.promise; 
    }; 
}); 
0

哟可以这样做,

module.factory('UserPreference', function($resource, $location) { 

if($location.search().preference_type_id){ 
    return $resource('/users/:user_id/preferences/:preference_type_id', { 
    user_id: "@user_id", 
    preference_type_id: "@preference_type_id" 
    }) 
} 

else{ 
     //do your initialization and return 
     } 


})