AngularJS并通过函数返回javascript数组中的对象

时间:2015-05-16 07:14:22

标签: javascript angularjs

我在尝试在函数中的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,它将为我提供数组中正确的第一项。有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先重要的是 if-else 不是循环,而是条件语句,循环示例是 。您可以在MDN上的JS中阅读有关control flowloops的更多信息。

您获得的错误是因为您希望details在作为参数传递给getItemDetails时始终定义。您正在访问此行中的name媒体资源:console.log (itemDetails[0].name);。但是在控制器代码中,您在没有任何参数的情况下调用itemService.getItemDetails(),因此detailsundefined并且抛出TypeError

如果您希望这个工作,您应该将有效对象传递给getItemDetails。请稍微考虑一下设计,getItemDetails的作用对我来说还不清楚。您只是将details对象包装到Array中,您真的不需要服务来执行此操作。

此外,在getItemDetails功能中,您无法访问代码。 console.log语句之后的return不会被执行。你应该删除它。