2016-08-12 66 views
0

我正在构建一个使用组件结构的Angular 1.5应用程序。承诺从服务中的$ http调用返回后,我试图调用另一个函数在数据集显示在UI上之前对其进行过滤。控制器中的角函数没有在承诺后调用

但是,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方法不歌厅电话(因为你已经评论说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对我来说这似乎是正确的..因为你正在比较一个对象的名字是否相等。 –