我正在构建一个由第三方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似乎是更清洁的选项,因为这实际上是一个数据问题而不是控制器问题,但我无法弄清楚如何做到这一点的细节。具体来说,我无法访问传递给资源的:user_id和:preference_type_id参数。
我应该在控制器中处理这个吗?有什么东西真的很明显我不见了吗?
答案 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;
};
});