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

AngularJS - initialize ngResource object if API response is null

我正在构建一个由第三方 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"
  })
})

如果用户没有为特定偏好类型指定偏好,则结果将为空。我想在响应为空的情况下初始化对象。

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

我可以看到两个选项:

  1. 在工厂内的 transformResponse 中执行此操作
  2. 在控制器中处理

1 似乎是更清晰的选项,因为这实际上是一个数据问题,而不是控制器问题,但我无法弄清楚如何做到这一点的细节。具体来说,我无法访问传递给资源的 :user_id 和 :preference_type_id 参数。

我应该只在控制器中处理吗?有什么很明显的东西我错过了吗?

你能做点什么吗,

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
      }


})

将它包装在一个您可以调用任意多次的函数上。

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;
  };
});