2016-08-12 56 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對我來說這似乎是正確的..因爲你正在比較一個對象的名字是否相等。 –

相關問題