1

我是 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": []
  }
}

在此表单中,我有一个包含 Airport 列表的下拉列表,我希望将在此下拉列表中选择到达机场的值,但未选择任何值,我尝试在 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”

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

谢谢你。

4

1 回答 1

0

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

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

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

您的视图应该自动更新,并且您说过它会自动更新,至少对于显示 json 的部分。为了使下拉列表更新,您应该将其值绑定到 $scope.person 内的属性

如果下拉列表没有更新,那么一定有其他错误,您可能还需要发布下拉列表的代码。
如果您想手动更新下拉列表,那么您需要将相关代码放在回调中(我在上面的代码中添加到“person.show”的函数)以使其工作

于 2015-10-01T14:24:32.287 回答