【问题标题】:Issues with single-requests in RestangularRestangular 中的单个请求问题
【发布时间】:2015-02-24 18:26:38
【问题描述】:

我在 Angular 控制器中使用通过 Restangular 检索到的 REST 数据的能力有一点问题。我有以下代码适用于帐户列表:

var baseAccounts = Restangular.all('accounts');

baseAccounts.getList().then(function(accounts) {
  $scope.accounts = accounts;
});

这非常适合列表。我对单个帐户使用类似的语法:

var baseAccount = Restangular.one('accounts');

baseAccount.getList(GUID).then(function(returnedAccount) {
  $scope.currentAccount = returnedAccount;
});

我使用 ng-repeat 作为我的第一个请求的处理指令。我正在尝试为单个请求绑定 {{ account.name }} 标签,但尽管请求正确发出,但它似乎没有显示任何数据。 GUID 是我必须传入以检索相关记录的参数。

我已经梳理了 Restangular 文档,在我看来,我正在正确地撰写我的请求。任何见解将不胜感激。

编辑:我尝试了此处列出的所有解决方案,但均无济于事。看起来 Restangular 正在提交结构正确的请求,但是当它通过我的控制器返回它时,它只显示为对帐户列表的请求。记录响应时,它会显示与帐户列表预期相同的响应。我不认为这是一个范围界定问题,因为我已经以一种可以缓解这种情况的方式封装了我的请求。因此,请求->填充请求的 Restangular 对象/承诺之间似乎存在脱节->与请求的数据绑定。 Restangular 在返回帐户数组或未定义之间交替。

【问题讨论】:

    标签: angularjs restangular


    【解决方案1】:

    one() 函数有第二个参数,它接受一个 id,例如.one('用户',1)。你可以利用它。

    代码

    var baseAccount = Restangular.one('accounts', 1); //1 would be account id
    
    baseAccount.getList('account').then(function(returnedAccount) {
      $scope.currentAccount = returnedAccount;
    });
    

    var baseAccount = Restangular.one('accounts', 1); //1 would be account id
    
    baseAccount.all('account').getList().then(function(returnedAccount) {
      $scope.currentAccount = returnedAccount;
    });
    

    更多信息请查看github issue

    希望对您有所帮助,谢谢。

    【讨论】:

    • @mattchue 有帮助吗?
    • 确实如此,但我的问题仍然存在。我已经用更多信息更新了 OP。感谢您的帮助!
    【解决方案2】:

    你看过了吗:

    https://github.com/mgonto/restangular#using-values-directly-in-templates

    自 Angular 1.2 起,模板中的 Promise 解包已默认禁用,很快将被弃用。

    试试:

    $scope.accounts = baseAccounts.getList().$object;
    

    【讨论】:

    • 我实际上最终从我的项目中删除了restangular,因为它不像我希望的那样易于访问和高效。如果这是正确答案并且其他人可以验证,我会将其标记为已回答。我会测试,但我不再有权访问此状态下的项目。感谢您的帮助!
    • @mattchue 出于好奇,您最终是滚动自己的实现还是转移到另一个库?我目前正在评估restangular,并想知道我是否会遇到长期问题等。
    • 我使用自己的实现运行。 Angular 在范围界定方面做得很好,所以如果您还不熟悉,请查看 Angular 的服务,您可以相当轻松地将自己的数据堆栈放在一起:)
    • 好的,非常感谢您提供的信息。我假设您使用 $resource 运行并围绕它建立了便利?还是您采用裸机方法并从 $http 构建?
    • 一路裸机。我想如果我必须制作自己的 REST 实现,我想要完全控制,以便针对我的后端量身定制。我实际上在 Restangular 之前尝试过 $resource 并且对文档感到相当困惑。看起来 mgonto 对 restangular 的维护并没有被搁置,他已经一年多没有在那个 repo 上提交过自己的承诺
    【解决方案3】:

    尝试:

    var baseAccount = Restangular.one('accounts', GUID);
    
    baseAccount.get().then(function(returnedAccount) {
      $scope.currentAccount = returnedAccount;
    });
    

    这里的问题是它期望返回一个数组。我假设您期待一个帐户对象。因此我们需要使用 get 函数,而不是 getList()

    【讨论】:

    • 我已经尝试了此处列出的所有解决方案,但均无济于事。看起来 Restangular 正在提交结构正确的请求,但是当它通过我的控制器返回它时,它只显示为对帐户列表的请求。记录响应时,它会显示与帐户列表预期相同的响应。我不认为这是一个范围界定问题,因为我已经以一种可以缓解这种情况的方式封装了我的请求。因此,请求 -> 填充请求的 Restangular 对象/承诺 -> 与请求的数据绑定之间似乎存在脱节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2014-02-13
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多