我的离子/ 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
我能尝试什么想法?
提前致谢。
答案 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>