教程和文档展示了这种非常方便的 AJAX 调用语法:
$scope.myvar = $resource(/*blah blah*/);
successfn
如果我的 API 没有返回myvar
但类似的东西,有没有办法使用这种语法(而不必每次都创建一个新的) {"myvar": myvar}
?
教程和文档展示了这种非常方便的 AJAX 调用语法:
$scope.myvar = $resource(/*blah blah*/);
successfn
如果我的 API 没有返回myvar
但类似的东西,有没有办法使用这种语法(而不必每次都创建一个新的) {"myvar": myvar}
?
更新:啊,现在我想我得到了你想要的:你想在这样的调用中为返回的对象的一个字段提供空引用(占位符):
var User = $resource('/user/:userId', {userId:'@id'});
我对吗?
如果是这样 - 我认为最简单的方法就是绑定到对象的字段(又名 {{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);
希望这会有所帮助,但很可能我没有得到你究竟想要什么:) 让我知道。
相关文件。
您需要在资源上调用 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 现在公开了一个承诺。