Угловая функция в контроллере не вызывается после обещания

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((error) => console.log(error)) ? Вы уверены, что getItems возвращает обещание ... проверьте консоль на наличие ошибок
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Я не вижу причин, по filterApps метод filterApps не получает вызов (поскольку вы уже прокомментировали, что функция 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
    Спасибо. Я пропустил это возвращение. Также есть лучший способ сделать это сравнение массивов?
  • 1
    @ erichardson30 мне кажется правильным .. так как вы сравниваете name объекта на равенство.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню