【发布时间】:2017-02-11 13:48:24
【问题描述】:
我有一个对象 (searchedMenu),其中包含 3 个长度相等的数组(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,短名称1,描述1
- name2,short_name2,description2
我正在努力做到这一点。我已经在相关的div 中将我的控制器声明为
<div class="container" ng-controller = "NarrowItDownController as narrow">
如果我这样做:
<ul>
<li ng-repeat="item in narrow.searchedMenu"> {{item}}</li>
</ul>
我得到 3 个包含每个数组的所有元素的要点,如下所示:
- 姓名1,姓名2,...
- 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);
})
};
}
请注意,我在上面的示例中对搜索词进行了硬编码,因为它正在进行中。
【问题讨论】:
-
你的角度控制器代码在哪里?
-
也可以给我们展示narrow.searchedMenu的console.log
-
@FerasSalim 第一个代码块是Controller代码的关键部分,但我可以添加更多代码,没问题。给我 10 秒。
-
@defaultcheckbox 当然是
Object {name: Array[219], short_name: Array[219], description: Array[219]} -
为什么需要将
description数组转换成3个数组。您可以使用ng-repeat="item in description"并与item.name、item.short_name和item.description绑定
标签: javascript html angularjs arrays