0

教程和文档展示了这种非常方便的 AJAX 调用语法:

$scope.myvar = $resource(/*blah blah*/);

successfn如果我的 API 没有返回myvar但类似的东西,有没有办法使用这种语法(而不必每次都创建一个新的) {"myvar": myvar}

4

2 回答 2

1

更新:啊,现在我想我得到了你想要的:你想在这样的调用中为返回的对象的一个​​字段提供空引用(占位符):

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);

希望这会有所帮助,但很可能我没有得到你究竟想要什么:) 让我知道。

相关文件

于 2013-02-03T18:16:16.640 回答
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 现在公开了一个承诺。

于 2013-02-05T02:54:20.533 回答