2016-10-03 48 views
3

含有愚弄與每個索引1發子彈對象的子陣列的名單上有含有相等的長度(nameshort_name,和description)的3個陣列的對象(searchedMenu)。顯示使用納克 - 重複

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; 

我要顯示的每個nameshort_namedescription爲無序列表項是這樣的:

  • 名1,short_name1,內容描述
  • 名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,...
  • descrip檢查一次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> 

,它給了我沒有在瀏覽器的控制檯錯誤:

Error: [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); 
    }) 
    }; 

} 

請注意,我在上面的示例中對搜索詞進行了硬編碼,因爲這是一項正在進行的工作。

+0

在哪裏你的角度控制器代碼? –

+0

也可能向我們展示console.log的narrow.searchedMenu – defaultcheckbox

+0

@FerasSalim第一個代碼塊是Controller代碼的關鍵部分,但我可以添加更多的代碼,沒問題。給我10秒鐘。 –

回答

5

試試這個:

<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-重複指令重複因此,你必須添加track by $index到你的中繼

+1

@ Hack-R看到我的更新回覆 – user449689

+0

它的工作! :-)謝謝,這真是太棒了。我從來不知道'追蹤'。 –

+0

@ Hack-R我是glat,謝謝 – user449689

0

如果你不需要它拆出來,你應該這樣做

<ul> 
<li ng-repeat="item in description"> {{item.name}}, {{item.shortName}},{{item.description}},</li> 
</ul> 
+0

這不會導致任何內容顯示在我的瀏覽器中 –

+0

什麼是您的數據結構?你能舉一個例子嗎? – nikjohn

+0

當然,對象有你的答案中的3個數組。如果你想看到這裏的原始數據:https://davids-restaurant.herokuapp.com/menu_items.json –

0

在你的控制器:

menu.searchedMenu = description; 

在模板:

<ul> 
<li ng-repeat="item in searchedMenu"> {{item.name}}, {{item.shortName}},{{item.description}},</li> 
</ul> 
+0

控制檯看起來不錯,但瀏覽器中沒有任何東西出現。也許是因爲控制器的語法(即「窄」?) –

0

第一我認爲isla不是必須的,因爲關鍵值在零件數據和menú中是相同的,所以我建議只做最後一部分,是menu.searchedMenu = searchingMenu;並更改searchedmenu在你的描述正確和第二IR的左邊是一個控制人變更菜單到這個變量的內部和NG重複地說:

<li ng-repeat="item in searchedMenu"> {{item.name}}, {{item.short_name}}, {{item.description}}</li>

它應該工作