【问题标题】:How to traverse this json object in Angular js?如何在Angular js中遍历这个json对象?
【发布时间】:2023-04-08 14:42:01
【问题描述】:

我从服务器收到了这个对象:

Resource {$promise: Promise, $resolved: false, $get: function, $save: function, $query: function…}
    $promise: Promise
    $resolved: true__v: 
    _id: "54ed85a92908cc9c0cce7044"
    about: "about"
    amenities: Array[0]
        length: 
        __proto__: Array[0]
    created: "2015-02-25T08:19:53.790Z"
    direction: ""
    images: Array[2]
    location: "lkj"
    name: "resort3"
    path: "uploads/projects/ASH_RESORT002"
    profile_pic: "uploads/projects/ASH_RESORT002/images/2013-05-18-1452.jpg"
    resort_id: "ASH_RESORT002"
    room_count: 
    user: Object
    __proto__: Resource

我可以分别使用 obj.$promise 和 $.resolved 访问 json 中的 $promise 和 $resolved 项目。但我无法通过 obj.images 或 obj.resort_id 访问非美元项目,如“图像”

顺便说一句,当针对 ng-model 使用时,视图中可以访问相同的项目。像 ng-model="obj.resort_id" 这样的东西正在成功绑定。

请指导!

【问题讨论】:

  • 如果你使用 console.log(obj.resort_id) 会得到什么?

标签: json angularjs meanjs


【解决方案1】:

您没有包括检索或记录此资源的代码,所以我在这里进行一些猜测。您可能会遇到console.log() 的副作用。该函数是异步的——它不会立即记录对象的“当前”值。但是,对象属性访问尝试是即时的。当您 console.log() 时,您的对象可能看起来“已解决”(因为它是,在其工作时),但直接访问属性正在查看尚未解决的对象。您可以通过console.log()'ing $resolved 属性来确认这一点。

$resource 的文档包含适当的解决方案:

var User = $resource('/user/:userId', {userId:'@id'});
User.get({userId:123}).$promise.then(function(user) {
    // access user.value here.
});

也就是说,您无法在调用.get() 后立即访问User.*。你需要“然后”承诺并让它解决。

【讨论】:

  • 顺便说一句,当针对 ng-model 使用时,视图中可以访问相同的项目。像 ng-model="obj.resort_id" 这样的东西正在成功绑定。
  • 感谢您指导我。通过使用超时功能得到了我想要的值
  • 那么这绝对是发生在你身上的事情。超时与等待 promise 解决的作用相同。并且 AngularJS 本身足够聪明,可以在 promise 解决时绘制正确的值。
  • 不过,超时并不完美。如果 AJAX 请求非常快,超时会减慢它的速度。如果它很慢,超时将​​“错过”它,它会再次中断。兑现承诺是“正确”的解决方案。
猜你喜欢
  • 2012-04-10
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2021-11-20
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多