使用promise只获得ajax响应的一部分

时间:2013-02-03 16:14:04

标签: angularjs

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

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

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

2 个答案:

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

希望这会有所帮助,但很可能我没有得到你到底发生了什么:)让我知道。

Relevant documentation

答案 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现在公开了一个承诺。

相关问题