ng-click在ng-repeat内多次触发

时间:2015-05-18 22:52:25

标签: javascript angularjs ionic-framework ionic

我的离子/ angularjs应用程序有一个问题,它是在ng-repeat内启动时触发了4次ng-click。它会在第一次返回正确的结果,然后返回3个未定义的值,这会导致各种问题。我已经阅读了其他一些关于这些类型错误的帖子,但我无法自行解决。

这是令人讨厌的ng-repeat循环:

  <ion-item class="item-accordion"
                        ng-repeat="item_type in item.subcategories"
                        ng-show="isGroupShown(item)"
                        ng-click="onSelectItems(item_type)">

                {{item_type.name}}
              </ion-item>

这是一个基于JSON文件的手风琴布局,并正确地在列表中给出了正确的项目名称。

这是控制器中存在的onSelectItems函数:

$scope.onSelectItems = function(item_type) {

        var params = item_type.name;

        $state.go('tab.itemDetail', params);

        itemService.getItemDetails(item_type);


};

这是itemService:

getItemDetails: function(details) {

      var name = details.name;

      console.log(name);

      return name;

    }

最后,这里是我要显示项目名称(主/详细信息)的控制器:

.controller("itemListingDetailCtrl", function ($scope, itemService, $stateParams, $state)
{
  console.log(itemService.getItemDetails(name));

  $scope.name = itemService.getItemDetails(name);


})     

当我点击HTML中的项目type_type时(在Chrome下的Ripple中),在开发人员工具中,我看到它为我提供了正确的名称,后跟3个未定义的值以及开发人员工具中的以下错误。

Cannot read property 'name' of undefined
    at Object.getItemDetails 

我能尝试什么想法?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在以下代码中:

.controller("itemListingDetailCtrl", function ($scope, itemService, $stateParams, $state)
{
  console.log(itemService.getItemDetails(name));

  $scope.name = itemService.getItemDetails(name);


});

名称不存在。 也许你对$ stateParams.name的引用(取决于你的ui-routing定义,请参见官方文档:https://github.com/angular-ui/ui-router/wiki/URL-Routing

路由的基本示例应为:

$stateProvider
    .state('item.detail', {
        url: "/item/:name",
        templateUrl: 'item.detail.html',
        controller: itemListingDetailCtrl
    })

因此,您的函数调用itemService.getItemDetails(name)正在传递undefined值。

在函数中,您可以启动名称:

 var name = details.name;

其中(见上文)details = undefined。

使用参数值更正您的控制器应该可以解决问题(如果您很好地传递参数并且路由配置良好)

$scope.name = $stateParams.name

答案 1 :(得分:0)

我认为这就是你想要的http://forum.ionicframework.com/t/accordion-list/2832所以基本上你需要在离子项之外进行ng-repeat。检查HTML选项卡,看看他们如何为每个离子项分配ng-click。

编辑: 我觉得它应该是这样的。

<div ng-repeat="item_type in item.subcategories">
  <ion-item class="item-accordion"
                 ng-show="isGroupShown(item)"
                 ng-click="onSelectItems(item_type)">

    {{item_type.name}}
  </ion-item>
</div>