Pet*_*tah 13 javascript angularjs angularjs-resource
如何从$资源获得空响应?
我正在运行这个:
angular.module("services").factory('Member', function($resource) {
var Member = $resource('/api/v1/member.json');
Member.current = Member.get();
return Member;
});
Run Code Online (Sandbox Code Playgroud)
但服务器响应:
null
Run Code Online (Sandbox Code Playgroud)
因为用户未登录.
但是当我记录结果时,我得到了这个:
Resource
0: "n"
1: "u"
2: "l"
3: "l"
$promise: Object
$resolved: true
__proto__: Resource
Run Code Online (Sandbox Code Playgroud)
我在字面上的预期null
.
Ste*_*wie 14
$resource.get
默认情况下,方法期望JSON响应是一个对象(解析时).调用时$resource.get()
,结果将成为$ resource的一个实例.
在您的示例中,调用Member.get({id:1})
将生成一个$ resource实例,该实例是通过调用new Member()
source创建的,然后填充源(当XHR完成时),其中包含已解析的JSON响应的属性:
shallowClearAndCopy(data, value);
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
浏览函数体,您将意识到函数不希望src
参数只是object(for (var key in src) { ...
).所以,如果你提供字符串"null"
,结果将是:
{1: "n", 2: "u", 3: "l", ...}
Run Code Online (Sandbox Code Playgroud)
ngResource构建为支持使用JSON作为隐含数据传输格式的RESTfull API,因此您将无法使用响应,例如"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}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3740 次 |
最近记录: |