【问题标题】:Angular function in controller not getting called after promise承诺后未调用控制器中的角函数
【发布时间】:2016-12-19 22:02:02
【问题描述】:

我正在使用组件结构构建一个 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;

【问题讨论】:

  • 我没有看到任何$http 电话...
  • 真的进入成功回调吗,试试加.error((error) => console.log(error))?你确定getItems 确实返回了一个承诺.. 检查控制台以及错误
  • @DannyBuonocore $http 调用在与问题无关的服务中
  • @PankajParkar 是的,它确实进入了成功回调。以前我有this.itemsService .getItems() .success((apps) => this.displayApps = apps); 并显示所有应用程序
  • 您会惊讶于这里有多少问题无法回答,因为 OP 认为违规代码“与问题无关”......只是说'

标签: javascript angularjs


【解决方案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;
            }
        })
    });
}

【讨论】:

  • 谢谢。我错过了那个回报。还有更好的方法来进行数组比较吗?
  • @erichardson30 这对我来说似乎是正确的.. 因为您正在比较对象的 name 是否相等。
猜你喜欢
  • 2016-09-30
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2013-12-15
  • 1970-01-01
相关资源
最近更新 更多