2016-08-12 2 views
0

Я создаю приложение Angular 1.5 с использованием структуры компонентов. После того, как обещание вернется из вызова $ http в службе, я пытаюсь вызвать другую функцию для фильтрации набора данных, прежде чем он будет отображаться в пользовательском интерфейсе.Угловая функция в контроллере не получает вызов после обещания

Однако функция filterApps не вызывается.

Также ... в функции filterApps Я пытаюсь сравнить с массивами объектов и возвращать те, которые имеют одинаковое имя. Это лучший способ сделать это или есть более чистый способ?

Контроллер:

import allApps from '../../resources/data/application_data.js'; 

class HomeController { 
    /*@ngInject*/ 
    constructor(ItemsService) { 
     this.itemsService = ItemsService; 
     this.displayApps = []; 
    } 

    $onInit() { 
     this.itemsService 
      .getItems() 
      .success((apps) => this.filterApps(apps)); 
    } 

    filterApps(siteApps) { 
     this.displayApps = allApps.applications.filter((app) => { 
      siteApps.applications.map((siteApp) => { 
       if(siteApp.name === app.name) { 
        return app; 
       } 
      }) 
     }); 
    } 
} 

export default HomeController; 
+0

Я не вижу '$ http' называют ... –

+2

ли это на самом деле попасть в успех обратного вызова, попробуйте добавить' .error ((ошибка) => console.log (ошибка)) '? Вы уверены, что 'getItems' вернет обещание .. проверьте консоль, а также за ошибку –

+0

@DannyBuonocore $ http-вызов находится в сервисе, который не имеет никакого отношения к вопросу – erichardson30

ответ

1

Я не вижу никаких причин, что filterApps метод не Geting вызов (как вы уже отметили, что success функция вызывался). Я думаю, вы просто проверяете, что ничего не было перенесено в переменную displayApps. Реальная проблема заключается в том, что вы не вернули внутренний результат map в filter. Вот почему ничто не возвращается.

Код

filterApps(siteApps) { 
    this.displayApps = allApps.applications.filter((app) => { 
     //returning map function result. 
     return siteApps.applications.map((siteApp) => { 
      if(siteApp.name === app.name) { 
       return app; 
      } 
     }) 
    }); 
} 
+0

Спасибо. Мне не хватало этого возвращения. Также есть лучший способ сделать это сравнение массива? – erichardson30

+1

@ erichardson30 мне кажется правильным, поскольку вы сравниваете «имя» объекта для равенства. –

Смежные вопросы