我是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'未定义的
如何显示在下拉列表中选择的正确值以及如何访问其他对象(如中途停留数组)以更新其值?
谢谢。
答案 0 :(得分:0)
当您调用console.log时,尚未检索到人员的数据。你应该这样做:
$scope.person = Person.show({id: $routeParams.id}, function(person) {
console.log(person.flight.arrivalAirport);
});
通常,任何处理异步接收数据的代码都不能在调用之后立即放置,因为此时检索数据的可能性非常小,您应该使用回调和承诺。
你的视图应该自动更新,你说它确实如此,至少对于显示json的部分。为了进行下拉更新,您应该将其值绑定到$ scope.person
中的属性如果下拉列表未更新,则必定会出现其他错误,您可能还需要发布下拉列表代码。
如果你想手动更新下拉列表,那么你需要将相关的代码放在回调中(我在上面的代码中添加到" person.show"的功能)它的工作