提问人:Hack-R 提问时间:10/3/2016 最后编辑:Hack-R 更新时间:10/3/2016 访问量:160
使用 ng-repeat 显示包含重复项的对象子数组列表,每个索引有 1 个项目符号
Display list of object's child arrays containing dupes with 1 bullet per index using ng-repeat
问:
我有一个对象 (),其中包含 3 个长度相等的数组(、 和 )。searchedMenu
name
short_name
description
for(var i=0;i<description.length;i++){
searchedMenu.name[i] = description[i].name;
searchedMenu.short_name[i] = description[i].short_name;
searchedMenu.description[i] = description[i].description;
}
menu.searchedMenu = searchedMenu;
我想将每个 , , 和显示为无序列表项,如下所示:name
short_name
description
- 名称 1、short_name1、描述1
- 名称 2、short_name2、描述2
我正在努力做到这一点。我已将我的控制器声明为相关div
<div class="container" ng-controller = "NarrowItDownController as narrow">
如果我这样做:
<ul>
<li ng-repeat="item in narrow.searchedMenu"> {{item}}</li>
</ul>
我得到 3 个项目符号,其中包含每个数组的所有元素,如下所示:
- name1、name2,...
- short_name1,short_name2,......
- 描述1, 描述2, ...
如果我这样做:
<li ng-repeat="item in narrow.searchedMenu"> {{item.name}}, {{item.short_name}}, {{item.description}}</li>
我得到:
- , ,
- , ,
- , ,
作为一个实验,我也尝试了这个:
<li ng-repeat="item in narrow.searchedMenu.name"> {{item}}</li>
它在浏览器中没有给我任何信息,控制台错误为:
错误:[ngRepeat:dupes] http://errors.angularjs.org/1.5.8/ngRepeat/dupes?p0=item%20in%20narrow.searchedMenu.name&p1=string%3AOrange%20Chicken&p2=Orange%20Chicken
是:console.log("Searched menu: ", menu.searchedMenu);
Searched menu: Object {name: Array[219], short_name: Array[219], description: Array[219]}
完整的控制器代码是(这是一项正在进行的肮脏工作):
NarrowItDownController.$inject = ['MenuSearchService'];
function NarrowItDownController(MenuSearchService) {
var menu = this;
var promise = MenuSearchService.getMatchedMenuItems();
var item_name = ["",""];
var description;
var searchValue = "ton";
function containsFilter(value) {
return value.indexOf(searchValue) !== -1;
}
promise.then(function (response) {
menu.results = response.data;
menu.results = menu.results.menu_items;
description = response.data;
description = description.menu_items;
console.log(description);
var searchedMenu = {};
searchedMenu.name = [];
searchedMenu.short_name = [];
searchedMenu.description = [];
for(var i=0;i<description.length;i++){
searchedMenu.name[i] = description[i].name;
searchedMenu.short_name[i] = description[i].short_name;
searchedMenu.description[i] = description[i].description;
}
console.log(searchedMenu);
menu.searchedMenu = searchedMenu;//description.filter(containsFilter);
console.log("Searched menu: ", menu.searchedMenu);
})
.catch(function (error) {
console.log("Something went terribly wrong.");
});
menu.logMenuItems = function (searchTerm) {
var promise = MenuSearchService.getMatchedMenuItems(searchTerm);
promise.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
})
};
}
请注意,我在上面的示例中对搜索词进行了硬编码,因为它是一项正在进行的工作。
答:
如果你不需要拆分它,你应该这样做
<ul>
<li ng-repeat="item in description"> {{item.name}}, {{item.shortName}},{{item.description}},</li>
</ul>
评论
试试这个:
<ul>
<li ng-repeat="item in narrow.searchedMenu.name track by $index"> {{ item }}, {{ narrow.searchedMenu.short_name[$index] }}, {{ narrow.searchedMenu.description[$index] }}</li>
</ul>
该对象包含三个数组,因此您可以遍历其中一个数组,并在循环的每个步骤中,使用 .searchedMenu
$index
AngularJS 不允许在 ng-repeat 指令中重复,因此您必须添加到中继器track by $index
评论
track by
在控制器中:
menu.searchedMenu = description;
在模板中:
<ul>
<li ng-repeat="item in searchedMenu"> {{item.name}}, {{item.shortName}},{{item.description}},</li>
</ul>
评论
narrow
首先,我认为对于 isla 没有必要,因为部分数据和 menú 的键值相同,所以我建议只做最后一部分,即 menu.searchedMenu = searchedMenu;并将右侧的 searchedmenu 更改为您的描述,第二个 ir 左侧部分位于控制器内部,将 menú 更改为此变量,并在 ng 中重复放置:
<li ng-repeat="item in searchedMenu"> {{item.name}}, {{item.short_name}}, {{item.description}}</li>
它应该可以工作
评论
Object {name: Array[219], short_name: Array[219], description: Array[219]}
description
ng-repeat="item in description"
item.name
item.short_name
item.description