我在尝试在函数中的if-else循环中返回数组中的对象时遇到了麻烦。
基本上,我想返回数组中的第一个项目对象,getItemDetails将运行并获取第一个项目,然后如果再次触发,它将清除数组并将其他项目对象写入其中。
我有一个名为ItemService的服务,它包含以下功能:
getItemDetails: function(details) {
if (itemDetails.length == 0) {
itemDetails.push(details);
return itemDetails;
console.log(itemDetails[0].name);
}
else {
itemDetails = [];
itemDetails.push(details);
console.log (itemDetails[0].name);
return itemDetails;
console.log(itemDetails[0].name);
}
这是控制器:
.controller("itemListingDetailCtrl", function ($scope, itemService, $stateParams, $state)
{
$scope.name = itemService.getItemDetails()[0].name;
$scope.description = itemService.getItemDetails()[0].desc;
})
这是包含onSelectItems函数的手风琴,该函数将JSON对象作为参数。
<ion-item class="item-accordion"
ng-repeat="item_type in item.subcategories"
ng-show="isGroupShown(beer)"
ng-click="onSelectItems(item_type)">
{{item_type.name}}
</ion-item>
每当它运行时,我都可以在控制台日志中看到我收到以下错误:
Cannot read property 'name' of undefined
at Object.getItemDetails
如果我删除if else循环并简单地将项目推送到数组并返回itemDetails,它将为我提供数组中正确的第一项。有什么想法吗?
提前致谢。
答案 0 :(得分:1)
首先重要的是 if-else 不是循环,而是条件语句,循环示例是而和 。您可以在MDN上的JS中阅读有关control flow和loops的更多信息。
您获得的错误是因为您希望details
在作为参数传递给getItemDetails
时始终定义。您正在访问此行中的name
媒体资源:console.log (itemDetails[0].name);
。但是在控制器代码中,您在没有任何参数的情况下调用itemService.getItemDetails()
,因此details
为undefined
并且抛出TypeError
。
如果您希望这个工作,您应该将有效对象传递给getItemDetails
。请稍微考虑一下设计,getItemDetails
的作用对我来说还不清楚。您只是将details
对象包装到Array
中,您真的不需要服务来执行此操作。
此外,在getItemDetails
功能中,您无法访问代码。 console.log
语句之后的return
不会被执行。你应该删除它。