$resource.get
по умолчанию ожидает, что ответ JSON будет объектом (при анализе). При вызове $resource.get()
результатом будет экземпляр $resource.
В вашем примере вызов Member.get({id:1})
создаст экземпляр $resource, созданный вызовом new Member()
исходный код, а затем заполняет source (после завершения XHR) свойствами проанализированного ответа JSON:
shallowClearAndCopy(data, value);
Сигнатура функции, которой заполнен ваш экземпляр Member
, выглядит следующим образом:
function shallowClearAndCopy(src, dst) {
dst = dst || {};
angular.forEach(dst, function(value, key){
delete dst[key];
});
for (var key in src) {
if (src.hasOwnProperty(key) && key.charAt(0) !== '$' && key.charAt(1) !== '$') {
dst[key] = src[key];
}
}
return dst;
}
Взглянув на тело функции, вы поймете, что функция не ожидает, что параметр src
будет ничем иным, как объектом (for (var key in src) { ...
). Итак, если вы предоставите ему строку "null"
, результатом будет:
{1: "n", 2: "u", 3: "l", ...}
ngResource создан для поддержки RESTfull API с JSON в качестве подразумеваемого формата передачи данных, поэтому вы не сможете использовать такие ответы, как "null"
или что-либо еще, что не является допустимым JSON.
Если только.
Если вы не используете transformResponse
для преобразования "null"
во что-то вроде {'null': true}
на лету:
app.factory('Member', function($resource) {
var Member = $resource('member.txt', {}, {
get: {
method: 'GET',
isArray: false,
transformResponse: function(data, headersGetter){
if(data === 'null'){
return {null: true};
}
return angular.fromJson(data);
}
}
});
return Member;
});
$scope.member = Member.get({id: 1});
console.log($scope.member); // --> {null: true}
ДЕМО
person
Stewie
schedule
22.01.2014