AngularJS - 如果API响应为空,则初始化ngResource对象

时间:2015-06-28 17:13:35

标签: angularjs ngresource

我正在构建一个由第三方API支持的AngularJS应用程序。我有这样一个基本资源:

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

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

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

我可以看到两个选项:

  1. 在工厂内的transformResponse中执行此操作
  2. 在控制器中处理
  3. 1似乎是更清洁的选项,因为这实际上是一个数据问题而不是控制器问题,但我无法弄清楚如何做到这一点的细节。具体来说,我无法访问传递给资源的:user_id和:preference_type_id参数。

    我应该在控制器中处理这个吗?有什么东西真的很明显我不见了吗?

2 个答案:

答案 0 :(得分: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
      }


})

答案 1 :(得分: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;
  };
});