2015-06-28 59 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 
     } 


})