教程和文档显示了这种非常方便的AJAX调用语法:
$scope.myvar = $resource(/*blah blah*/);
有没有办法使用这种语法(而不必每次都创建一个新的successfn
)如果我的API没有返回myvar
但是{"myvar": myvar}
之类的东西?
答案 0 :(得分:1)
更新:啊,现在我觉得我得到了你想要的东西:你希望在这样的调用中为返回对象的字段提供空引用(占位符):
var User = $resource('/user/:userId', {userId:'@id'});
我是对的吗?
如果是这样 - 我认为最简单的方法就是绑定到对象的字段(aka {{user.myvar}})。
嗯,成功函数只被调用一次(如果)数据已成功接收。调用该函数时,将获取的数据作为参数提供给它,无论结构如何,都可以访问它。当然,您可以重用函数而不是定义一个内联函数。
所以不是这个(来自Angular docs的例子):
$http({method: 'GET', url: '/someUrl'}).
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
您可以使用:
function myHandler(data) {
// Do something with data.myvar ...
}
$http({method: 'GET', url: '/someUrl'}).success(myHandler);
希望这会有所帮助,但很可能我没有得到你到底发生了什么:)让我知道。
答案 1 :(得分:1)
您需要在资源上调用get()或query()来生成实际的AJAX请求。如果您不想将服务器API的完整结果直接分配给某个($ scope)变量,那么您必须编写成功函数。
var SomeResource = $resource('/blah/blah');
var theResource = SomeResource.get({optional params here}, function() {
$scope.myVar = theResource.myVar;
}
或
var SomeResource = $resource('/blah/blah');
SomeResource.get({optional params here}, function(theResource) {
$scope.myVar = theResource.myVar;
}
或者执行@Chasseur建议的操作 - 分配完整的结果然后绑定到视图中的相应字段:
var SomeResource = $resource('/blah/blah');
$scope.theResource = SomeResource.get({optional params here});
然后在HTML中使用{{theResource.myVar}}
。
此外,与$ http不同,$ resource不会返回承诺。 更新:在较新版本的Angular中,$ resource现在公开了一个承诺。