在JSON中访问嵌套对象,在下拉列表中选择正确的值(Angularjs)

时间:2015-10-01 14:00:40

标签: angularjs rest server dropdown

我是AngularJS的初学者。我使用$ resource服务根据服务器上的 id 来获取person类型的特定对象,以便更新此对象。

资源服务:

moduleName.factory('Person', function ($resource) {
  return $resource('/application/person/:id', {}, {
        show: { method: 'GET' , params: {id: '@id'}},
  });
});

我收到的对象以及使用{{}}在浏览器中显示的对象是:

      {
  "id": "560cf96ee85532035928889e",
  "firstName": "Christiane",
  "gender": "Male",
  "flight": {
    "id": null,
    "arrivalDate": "2015-01-05 11:30",
    "arrivalAirport": {
      "name": "Frankfurt"
    },
    "stopovers": []
  }
}

在这个表单中我有一个包含机场列表的下拉列表,我希望在此下拉列表中选择arrivalAirport的值,但没有选择任何值,我尝试设置此下拉列表的选定值此视图的AngularJs控制器。在设置此对象的值之前,我尝试通过控制器内的此代码访问它们的值。

moduleName.controller('PersonDetailController',function ($scope, $routeParams, Person,$location) {
                $scope.person = Person.show({id: $routeParams.id});
                console.log($scope.person.flight.arrivalAirport);
        });

当我想获取嵌套在 person 对象中的对象 flight.arrivalAirport 的值时,我收到了此错误。

TypeError:无法读取属性' arrivalAirport'未定义的

如何显示在下拉列表中选择的正确值以及如何访问其他对象(如中途停留数组)以更新其值?

谢谢。

1 个答案:

答案 0 :(得分:0)

当您调用console.log时,尚未检索到人员的数据。你应该这样做:

$scope.person = Person.show({id: $routeParams.id}, function(person) {
    console.log(person.flight.arrivalAirport);
});

通常,任何处理异步接收数据的代码都不能在调用之后立即放置,因为此时检索数据的可能性非常小,您应该使用回调和承诺。

你的视图应该自动更新,你说它确实如此,至少对于显示json的部分。为了进行下拉更新,您应该将其值绑定到$ scope.person

中的属性

如果下拉列表未更新,则必定会出现其他错误,您可能还需要发布下拉列表代码。
如果你想手动更新下拉列表,那么你需要将相关的代码放在回调中(我在上面的代码中添加到" person.show"的功能)它的工作