$resource.get
默认情况下,方法期望 JSON 响应是一个对象(在解析时)。调用$resource.get()
时,结果将是 $resource 的一个实例。
在您的示例中,调用Member.get({id:1})
将生成一个 $resource 实例,该实例是通过调用new Member()
源创建的,然后使用解析的 JSON 响应的属性填充源(当 XHR 完成时):
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}
演示