2016-08-12 4 views
0

Ich baue eine Angular 1.5 App mit der Komponentenstruktur. Nachdem das Versprechen vom $ http-Aufruf im Service zurückgegeben wurde, versuche ich eine andere Funktion aufzurufen, um das Dataset zu filtern, bevor es auf der Benutzeroberfläche angezeigt wird.Winkelfunktion im Controller wird nicht nach dem Versprechen aufgerufen

Die filterApps-Funktion wird jedoch nicht aufgerufen.

Auch ... in der FilterApps Funktion versuche ich mit Arrays von Objekten zu vergleichen und die gleichnamigen zurückzugeben. Ist das der beste Weg dies zu tun oder gibt es einen saubereren Weg?

Controller:

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

Ich sehe keine '$ http' nennen ... –

+2

Wird es in Erfolg Rückruf wirklich, versuchen Sie,' .error ((Fehler) => console.log (Fehler)) '? Sind Sie sicher, dass 'getItems' ein Versprechen zurückgibt .. überprüfen Sie auch die Konsole für Fehler –

+0

@DannyBuonocore der $ http Anruf ist in einem Dienst, der nichts mit der Frage zu tun hat – erichardson30

Antwort

1

Ich sehe keinen Grund, dass filterApps Methode nicht Anruf Geting wird (wie Sie bereits kommentiert, dass success Funktion aufgerufen wird immer). Ich schätze, Sie überprüfen gerade nichts wurde in displayApps Variable durchgeführt. Das eigentliche Problem ist, dass Sie das interne map Funktionsergebnis nicht an filter zurückgeben. Deshalb kommt nichts zurück.

-Code

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

Danke. Ich habe diese Rückkehr vermisst. Gibt es auch eine bessere Möglichkeit, diesen Array-Vergleich zu machen? – erichardson30

+1

@ erichardson30 scheint es mir richtig .. wie Sie "Name" eines Objekts für die Gleichheit vergleichen. –

Verwandte Themen